blob: 77040ef5d8987ba0ded99d37a87029725c8da0d8 [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 vkEnumerateLayers(VkPhysicalGpu gpu, size_t maxLayerCount, size_t maxStringSize, size_t* pOutLayerCount, char* const* pOutLayers, void* pReserved)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600308{
309 char str[1024];
310 if (gpu != NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600311 sprintf(str, "At start of layered EnumerateLayers\n");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600312 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, nullptr, 0, 0, "PARAMCHECK", str);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600313 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600314 loader_platform_thread_once(&tabOnce, initParamChecker);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600315 VkResult result = nextTable.EnumerateLayers(gpu, maxLayerCount, maxStringSize, pOutLayerCount, pOutLayers, pReserved);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600316 sprintf(str, "Completed layered EnumerateLayers\n");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600317 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, nullptr, 0, 0, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600318 fflush(stdout);
319 return result;
320 } else {
321 if (pOutLayerCount == NULL || pOutLayers == NULL || pOutLayers[0] == NULL)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600322 return VK_ERROR_INVALID_POINTER;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600323 // This layer compatible with all GPUs
324 *pOutLayerCount = 1;
325 strncpy(pOutLayers[0], "ParamChecker", maxStringSize);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600326 return VK_SUCCESS;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600327 }
328}
329
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600330VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600331{
332
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600333 VkResult result = nextTable.GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600334 return result;
335}
336
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600337VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600338{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600339 VkResult result = nextTable.QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600340 return result;
341}
342
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600343VK_LAYER_EXPORT VkResult VKAPI vkQueueAddMemReference(VkQueue queue, VkGpuMemory mem)
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600344{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600345 VkResult result = nextTable.QueueAddMemReference(queue, mem);
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600346 return result;
347}
348
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600349VK_LAYER_EXPORT VkResult VKAPI vkQueueRemoveMemReference(VkQueue queue, VkGpuMemory mem)
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600350{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600351 VkResult result = nextTable.QueueRemoveMemReference(queue, mem);
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600352 return result;
353}
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600354VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600355{
356
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600357 VkResult result = nextTable.QueueWaitIdle(queue);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600358 return result;
359}
360
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600361VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600362{
363
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600364 VkResult result = nextTable.DeviceWaitIdle(device);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600365 return result;
366}
367
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600368VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600369{
370 char str[1024];
371 if (!pAllocInfo) {
372 sprintf(str, "Struct ptr parameter pAllocInfo to function AllocMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600373 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600374 } else if (!vk_validate_vkmemoryallocinfo(pAllocInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600375 sprintf(str, "Parameter pAllocInfo to function AllocMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600376 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600377 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600378 VkResult result = nextTable.AllocMemory(device, pAllocInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600379 return result;
380}
381
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600382VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkGpuMemory mem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600383{
384
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600385 VkResult result = nextTable.FreeMemory(mem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600386 return result;
387}
388
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600389VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkGpuMemory mem, VkMemoryPriority priority)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600390{
391 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600392 if (!validate_VkMemoryPriority(priority)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600393 sprintf(str, "Parameter priority to function SetMemoryPriority has invalid value of %i.", (int)priority);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600394 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600395 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600396 VkResult result = nextTable.SetMemoryPriority(mem, priority);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600397 return result;
398}
399
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600400VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkGpuMemory mem, VkFlags flags, void** ppData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600401{
402
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600403 VkResult result = nextTable.MapMemory(mem, flags, ppData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600404 return result;
405}
406
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600407VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkGpuMemory mem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600408{
409
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600410 VkResult result = nextTable.UnmapMemory(mem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600411 return result;
412}
413
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600414VK_LAYER_EXPORT VkResult VKAPI vkPinSystemMemory(VkDevice device, const void* pSysMem, size_t memSize, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600415{
416
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600417 VkResult result = nextTable.PinSystemMemory(device, pSysMem, memSize, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600418 return result;
419}
420
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600421VK_LAYER_EXPORT VkResult VKAPI vkGetMultiGpuCompatibility(VkPhysicalGpu gpu0, VkPhysicalGpu gpu1, VkGpuCompatibilityInfo* pInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600422{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600423 pCurObj = (VkBaseLayerObject *) gpu0;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600424 loader_platform_thread_once(&tabOnce, initParamChecker);
425
Jon Ashburn630e44f2015-04-08 21:33:34 -0600426 VkResult result = nextTable.GetMultiGpuCompatibility(gpu0, gpu1, pInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600427 return result;
428}
429
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600430VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedMemory(VkDevice device, const VkMemoryOpenInfo* pOpenInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600431{
432 char str[1024];
433 if (!pOpenInfo) {
434 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenSharedMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600435 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600436 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600437 else if (!vk_validate_vkmemoryopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600438 sprintf(str, "Parameter pOpenInfo to function OpenSharedMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600439 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600440 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600441 VkResult result = nextTable.OpenSharedMemory(device, pOpenInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600442 return result;
443}
444
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600445VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedSemaphore(VkDevice device, const VkSemaphoreOpenInfo* pOpenInfo, VkSemaphore* pSemaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600446{
447 char str[1024];
448 if (!pOpenInfo) {
449 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenSharedSemaphore is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600450 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600451 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600452 else if (!vk_validate_vksemaphoreopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600453 sprintf(str, "Parameter pOpenInfo to function OpenSharedSemaphore contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600454 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600455 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600456 VkResult result = nextTable.OpenSharedSemaphore(device, pOpenInfo, pSemaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600457 return result;
458}
459
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600460VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerMemory(VkDevice device, const VkPeerMemoryOpenInfo* pOpenInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600461{
462 char str[1024];
463 if (!pOpenInfo) {
464 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenPeerMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600465 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600466 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600467 else if (!vk_validate_vkpeermemoryopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600468 sprintf(str, "Parameter pOpenInfo to function OpenPeerMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600469 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600470 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600471 VkResult result = nextTable.OpenPeerMemory(device, pOpenInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600472 return result;
473}
474
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600475VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImageOpenInfo* pOpenInfo, VkImage* pImage, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600476{
477 char str[1024];
478 if (!pOpenInfo) {
479 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenPeerImage is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600480 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600481 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600482 else if (!vk_validate_vkpeerimageopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600483 sprintf(str, "Parameter pOpenInfo to function OpenPeerImage contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600484 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600485 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600486 VkResult result = nextTable.OpenPeerImage(device, pOpenInfo, pImage, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600487 return result;
488}
489
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600490VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkObject object)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600491{
492
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600493 VkResult result = nextTable.DestroyObject(object);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600494 return result;
495}
496
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600497VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkBaseObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600498{
499 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600500 if (!validate_VkObjectInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600501 sprintf(str, "Parameter infoType to function GetObjectInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600502 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600503 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600504 VkResult result = nextTable.GetObjectInfo(object, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600505 return result;
506}
507
Mark Lobodzinskicf26e072015-04-16 11:44:05 -0500508VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemory(VkQueue queue, VkObject object, uint32_t allocationIdx, VkGpuMemory mem, VkGpuSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600509{
510
Mark Lobodzinskicf26e072015-04-16 11:44:05 -0500511 VkResult result = nextTable.QueueBindObjectMemory(queue, object, allocationIdx, mem, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600512 return result;
513}
514
Mark Lobodzinskicf26e072015-04-16 11:44:05 -0500515VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemoryRange(VkQueue queue, VkObject object, uint32_t allocationIdx, VkGpuSize rangeOffset, VkGpuSize rangeSize, VkGpuMemory mem, VkGpuSize memOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600516{
517
Mark Lobodzinskicf26e072015-04-16 11:44:05 -0500518 VkResult result = nextTable.QueueBindObjectMemoryRange(queue, object, allocationIdx, rangeOffset, rangeSize, mem, memOffset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600519 return result;
520}
521
Mark Lobodzinskicf26e072015-04-16 11:44:05 -0500522VK_LAYER_EXPORT VkResult VKAPI vkQueueBindImageMemoryRange(VkQueue queue, VkImage image, uint32_t allocationIdx, const VkImageMemoryBindInfo* bindInfo, VkGpuMemory mem, VkGpuSize memOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600523{
524 char str[1024];
525 if (!bindInfo) {
Mark Lobodzinskicf26e072015-04-16 11:44:05 -0500526 sprintf(str, "Struct ptr parameter bindInfo to function QueueBindImageMemoryRange is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600527 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600528 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600529 else if (!vk_validate_vkimagememorybindinfo(bindInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600530 sprintf(str, "Parameter bindInfo to function BindImageMemoryRange contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600531 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600532 }
Mark Lobodzinskicf26e072015-04-16 11:44:05 -0500533 VkResult result = nextTable.QueueBindImageMemoryRange(queue, image, allocationIdx, bindInfo, mem, memOffset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600534 return result;
535}
536
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600537VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600538{
539 char str[1024];
540 if (!pCreateInfo) {
541 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFence is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600542 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600543 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600544 else if (!vk_validate_vkfencecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600545 sprintf(str, "Parameter pCreateInfo to function CreateFence contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600546 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600547 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600548 VkResult result = nextTable.CreateFence(device, pCreateInfo, pFence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600549 return result;
550}
551
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600552VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600553{
554
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600555 VkResult result = nextTable.GetFenceStatus(fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600556 return result;
557}
558
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600559VK_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 -0600560{
561
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600562 VkResult result = nextTable.WaitForFences(device, fenceCount, pFences, waitAll, timeout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600563 return result;
564}
565
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600566VK_LAYER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, VkFence* pFences)
Mark Lobodzinskiebe814d2015-04-07 16:07:57 -0500567{
568
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600569 VkResult result = nextTable.ResetFences(device, fenceCount, pFences);
Mark Lobodzinskiebe814d2015-04-07 16:07:57 -0500570 return result;
571}
572
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600573VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600574{
575 char str[1024];
576 if (!pCreateInfo) {
577 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSemaphore is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600578 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600579 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600580 else if (!vk_validate_vksemaphorecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600581 sprintf(str, "Parameter pCreateInfo to function CreateSemaphore contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600582 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600583 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600584 VkResult result = nextTable.CreateSemaphore(device, pCreateInfo, pSemaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600585 return result;
586}
587
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600588VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600589{
590
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600591 VkResult result = nextTable.QueueSignalSemaphore(queue, semaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600592 return result;
593}
594
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600595VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600596{
597
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600598 VkResult result = nextTable.QueueWaitSemaphore(queue, semaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600599 return result;
600}
601
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600602VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600603{
604 char str[1024];
605 if (!pCreateInfo) {
606 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateEvent is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600607 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600608 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600609 else if (!vk_validate_vkeventcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600610 sprintf(str, "Parameter pCreateInfo to function CreateEvent contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600611 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600612 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600613 VkResult result = nextTable.CreateEvent(device, pCreateInfo, pEvent);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600614 return result;
615}
616
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600617VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600618{
619
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600620 VkResult result = nextTable.GetEventStatus(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600621 return result;
622}
623
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600624VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600625{
626
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600627 VkResult result = nextTable.SetEvent(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600628 return result;
629}
630
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600631VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600632{
633
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600634 VkResult result = nextTable.ResetEvent(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600635 return result;
636}
637
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600638VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600639{
640 char str[1024];
641 if (!pCreateInfo) {
642 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateQueryPool is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600643 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600644 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600645 else if (!vk_validate_vkquerypoolcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600646 sprintf(str, "Parameter pCreateInfo to function CreateQueryPool contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600647 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600648 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600649 VkResult result = nextTable.CreateQueryPool(device, pCreateInfo, pQueryPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600650 return result;
651}
652
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600653VK_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 -0600654{
655
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600656 VkResult result = nextTable.GetQueryPoolResults(queryPool, startQuery, queryCount, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600657 return result;
658}
659
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600660VK_LAYER_EXPORT VkResult VKAPI vkGetFormatInfo(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600661{
662 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600663 if (!validate_VkFormat(format)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600664 sprintf(str, "Parameter format to function GetFormatInfo has invalid value of %i.", (int)format);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600665 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600666 }
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600667 if (!validate_VkFormatInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600668 sprintf(str, "Parameter infoType to function GetFormatInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600669 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600670 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600671 VkResult result = nextTable.GetFormatInfo(device, format, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600672 return result;
673}
674
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600675VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600676{
677 char str[1024];
678 if (!pCreateInfo) {
679 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600680 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600681 }
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600682 else if (!vk_validate_vkbuffercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600683 sprintf(str, "Parameter pCreateInfo to function CreateBuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600684 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600685 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600686 VkResult result = nextTable.CreateBuffer(device, pCreateInfo, pBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600687 return result;
688}
689
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600690VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600691{
692 char str[1024];
693 if (!pCreateInfo) {
694 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBufferView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600695 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600696 }
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600697 else if (!vk_validate_vkbufferviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600698 sprintf(str, "Parameter pCreateInfo to function CreateBufferView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600699 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600700 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600701 VkResult result = nextTable.CreateBufferView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600702 return result;
703}
704
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600705void PreCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600706{
707 if(pCreateInfo == nullptr)
708 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600709 char const str[] = "vkCreateImage parameter, VkImageCreateInfo* pCreateInfo, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600710 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600711 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600712 return;
713 }
714
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600715 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600716 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600717 char const str[] = "vkCreateImage parameter, VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO "\
718 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO (precondition).";
719 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600720 return;
721 }
722
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600723 if (!validate_VkImageType(pCreateInfo->imageType))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600724 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600725 char const str[] = "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600726 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600727 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600728 return;
729 }
730
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600731 if (!validate_VkFormat(pCreateInfo->format))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600732 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600733 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600734 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600735 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600736 return;
737 }
738
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600739 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600740 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600741 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->format,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600742 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
743 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600744 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600745 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, cannot be "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600746 "validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600747 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600748 return;
749 }
750
751 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
752 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600753 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, contains "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600754 "unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600755 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600756 return;
757 }
758
759 // TODO: Can we check device-specific limits?
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600760 if (!vk_validate_vkextent3d(&pCreateInfo->extent))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600761 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600762 char const str[] = "vkCreateImage parameter, VkExtent3D pCreateInfo->extent, is invalid "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600763 "(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
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600768 if (!validate_VkImageTiling(pCreateInfo->tiling))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600769 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600770 char const str[] = "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600771 "unrecoginized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600772 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600773 return;
774 }
775}
776
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600777void PostCreateImage(VkResult result, VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600778{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600779 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600780 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600781 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600782 char const str[] = "vkCreateImage failed (postcondition).";
783 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600784 return;
785 }
786
787 if(pImage == nullptr)
788 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600789 char const str[] = "vkCreateImage parameter, VkImage* pImage, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600790 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600791 return;
792 }
793}
794
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600795VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600796{
797 PreCreateImage(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600798 VkResult result = nextTable.CreateImage(device, pCreateInfo, pImage);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600799 PostCreateImage(result, pImage);
800 return result;
801}
802
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600803VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600804{
805 char str[1024];
806 if (!pSubresource) {
807 sprintf(str, "Struct ptr parameter pSubresource to function GetImageSubresourceInfo is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600808 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600809 } else if (!vk_validate_vkimagesubresource(pSubresource)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600810 sprintf(str, "Parameter pSubresource to function GetImageSubresourceInfo contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600811 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600812 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600813 if (!validate_VkSubresourceInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600814 sprintf(str, "Parameter infoType to function GetImageSubresourceInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600815 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600816 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600817 VkResult result = nextTable.GetImageSubresourceInfo(image, pSubresource, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600818 return result;
819}
820
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600821VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600822{
823 char str[1024];
824 if (!pCreateInfo) {
825 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateImageView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600826 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600827 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600828 else if (!vk_validate_vkimageviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600829 sprintf(str, "Parameter pCreateInfo to function CreateImageView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600830 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600831 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600832 VkResult result = nextTable.CreateImageView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600833 return result;
834}
835
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600836VK_LAYER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600837{
838 char str[1024];
839 if (!pCreateInfo) {
840 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateColorAttachmentView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600841 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600842 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600843 else if (!vk_validate_vkcolorattachmentviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600844 sprintf(str, "Parameter pCreateInfo to function CreateColorAttachmentView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600845 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600846 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600847 VkResult result = nextTable.CreateColorAttachmentView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600848 return result;
849}
850
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600851VK_LAYER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600852{
853 char str[1024];
854 if (!pCreateInfo) {
855 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDepthStencilView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600856 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600857 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600858 else if (!vk_validate_vkdepthstencilviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600859 sprintf(str, "Parameter pCreateInfo to function CreateDepthStencilView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600860 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600861 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600862 VkResult result = nextTable.CreateDepthStencilView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600863 return result;
864}
865
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600866VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600867{
868 char str[1024];
869 if (!pCreateInfo) {
870 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateShader is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600871 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600872 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600873 else if (!vk_validate_vkshadercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600874 sprintf(str, "Parameter pCreateInfo to function CreateShader contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600875 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600876 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600877 VkResult result = nextTable.CreateShader(device, pCreateInfo, pShader);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600878 return result;
879}
880
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600881VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600882{
883 char str[1024];
884 if (!pCreateInfo) {
885 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipeline is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600886 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600887 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600888 else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600889 sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipeline contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600890 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600891 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600892 VkResult result = nextTable.CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600893 return result;
894}
895
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600896VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600897{
898 char str[1024];
899 if (!pCreateInfo) {
900 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipelineDerivative is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600901 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600902 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600903 else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600904 sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipelineDerivative contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600905 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600906 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600907 VkResult result = nextTable.CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600908 return result;
909}
910
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600911VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600912{
913 char str[1024];
914 if (!pCreateInfo) {
915 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateComputePipeline is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600916 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600917 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600918 else if (!vk_validate_vkcomputepipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600919 sprintf(str, "Parameter pCreateInfo to function CreateComputePipeline contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600920 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600921 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600922 VkResult result = nextTable.CreateComputePipeline(device, pCreateInfo, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600923 return result;
924}
925
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600926VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkPipeline pipeline, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600927{
928
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600929 VkResult result = nextTable.StorePipeline(pipeline, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600930 return result;
931}
932
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600933VK_LAYER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600934{
935
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600936 VkResult result = nextTable.LoadPipeline(device, dataSize, pData, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600937 return result;
938}
939
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600940VK_LAYER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600941{
942
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600943 VkResult result = nextTable.LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600944 return result;
945}
946
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600947VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600948{
949 char str[1024];
950 if (!pCreateInfo) {
951 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSampler is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600952 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600953 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600954 else if (!vk_validate_vksamplercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600955 sprintf(str, "Parameter pCreateInfo to function CreateSampler contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600956 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600957 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600958 VkResult result = nextTable.CreateSampler(device, pCreateInfo, pSampler);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600959 return result;
960}
961
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600962VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600963{
964 char str[1024];
965 if (!pCreateInfo) {
966 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorSetLayout is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600967 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600968 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600969 else if (!vk_validate_vkdescriptorsetlayoutcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600970 sprintf(str, "Parameter pCreateInfo to function CreateDescriptorSetLayout contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600971 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600972 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600973 VkResult result = nextTable.CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600974 return result;
975}
976
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600977VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayoutChain(VkDevice device, uint32_t setLayoutArrayCount, const VkDescriptorSetLayout* pSetLayoutArray, VkDescriptorSetLayoutChain* pLayoutChain)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600978{
979
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600980 VkResult result = nextTable.CreateDescriptorSetLayoutChain(device, setLayoutArrayCount, pSetLayoutArray, pLayoutChain);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600981 return result;
982}
983
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600984VK_LAYER_EXPORT VkResult VKAPI vkBeginDescriptorPoolUpdate(VkDevice device, VkDescriptorUpdateMode updateMode)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600985{
986 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600987 if (!validate_VkDescriptorUpdateMode(updateMode)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600988 sprintf(str, "Parameter updateMode to function BeginDescriptorPoolUpdate has invalid value of %i.", (int)updateMode);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600989 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600990 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600991 VkResult result = nextTable.BeginDescriptorPoolUpdate(device, updateMode);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600992 return result;
993}
994
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600995VK_LAYER_EXPORT VkResult VKAPI vkEndDescriptorPoolUpdate(VkDevice device, VkCmdBuffer cmd)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600996{
997
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600998 VkResult result = nextTable.EndDescriptorPoolUpdate(device, cmd);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600999 return result;
1000}
1001
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001002VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001003{
1004 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001005 if (!validate_VkDescriptorPoolUsage(poolUsage)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001006 sprintf(str, "Parameter poolUsage to function CreateDescriptorPool has invalid value of %i.", (int)poolUsage);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001007 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001008 }
1009 if (!pCreateInfo) {
1010 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorPool is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001011 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001012 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001013 else if (!vk_validate_vkdescriptorpoolcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001014 sprintf(str, "Parameter pCreateInfo to function CreateDescriptorPool contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001015 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001016 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001017 VkResult result = nextTable.CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001018 return result;
1019}
1020
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001021VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDescriptorPool descriptorPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001022{
1023
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001024 VkResult result = nextTable.ResetDescriptorPool(descriptorPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001025 return result;
1026}
1027
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001028VK_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 -06001029{
1030 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001031 if (!validate_VkDescriptorSetUsage(setUsage)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001032 sprintf(str, "Parameter setUsage to function AllocDescriptorSets has invalid value of %i.", (int)setUsage);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001033 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001034 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001035 VkResult result = nextTable.AllocDescriptorSets(descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001036 return result;
1037}
1038
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001039VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001040{
1041
1042 nextTable.ClearDescriptorSets(descriptorPool, count, pDescriptorSets);
1043}
1044
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001045VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001046{
1047
1048 nextTable.UpdateDescriptors(descriptorSet, updateCount, ppUpdateArray);
1049}
1050
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001051VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001052{
1053 char str[1024];
1054 if (!pCreateInfo) {
1055 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicViewportState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001056 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001057 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001058 else if (!vk_validate_vkdynamicvpstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001059 sprintf(str, "Parameter pCreateInfo to function CreateDynamicViewportState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001060 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001061 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001062 VkResult result = nextTable.CreateDynamicViewportState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001063 return result;
1064}
1065
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001066VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001067{
1068 char str[1024];
1069 if (!pCreateInfo) {
1070 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicRasterState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001071 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001072 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001073 else if (!vk_validate_vkdynamicrsstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001074 sprintf(str, "Parameter pCreateInfo to function CreateDynamicRasterState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001075 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001076 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001077 VkResult result = nextTable.CreateDynamicRasterState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001078 return result;
1079}
1080
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001081VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001082{
1083 char str[1024];
1084 if (!pCreateInfo) {
1085 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicColorBlendState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001086 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001087 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001088 else if (!vk_validate_vkdynamiccbstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001089 sprintf(str, "Parameter pCreateInfo to function CreateDynamicColorBlendState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001090 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001091 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001092 VkResult result = nextTable.CreateDynamicColorBlendState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001093 return result;
1094}
1095
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001096VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001097{
1098 char str[1024];
1099 if (!pCreateInfo) {
1100 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicDepthStencilState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001101 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001102 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001103 else if (!vk_validate_vkdynamicdsstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001104 sprintf(str, "Parameter pCreateInfo to function CreateDynamicDepthStencilState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001105 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001106 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001107 VkResult result = nextTable.CreateDynamicDepthStencilState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001108 return result;
1109}
1110
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001111void PreCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001112{
1113 if(device == nullptr)
1114 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001115 char const str[] = "vkCreateCommandBuffer parameter, VkDevice device, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001116 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001117 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001118 return;
1119 }
1120
1121 if(pCreateInfo == nullptr)
1122 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001123 char const str[] = "vkCreateCommandBuffer parameter, VkCmdBufferCreateInfo* pCreateInfo, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001124 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001125 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001126 return;
1127 }
1128
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001129 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001130 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001131 char const str[] = "vkCreateCommandBuffer parameter, VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO "\
1132 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO (precondition).";
1133 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001134 return;
1135 }
1136}
1137
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001138void PostCreateCommandBuffer(VkResult result, VkCmdBuffer* pCmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001139{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001140 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001141 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001142 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001143 char const str[] = "vkCreateCommandBuffer failed (postcondition).";
1144 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001145 return;
1146 }
1147
1148 if(pCmdBuffer == nullptr)
1149 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001150 char const str[] = "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001151 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001152 return;
1153 }
1154}
1155
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001156VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device,
1157 const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001158{
1159 PreCreateCommandBuffer(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001160 VkResult result = nextTable.CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001161 PostCreateCommandBuffer(result, pCmdBuffer);
1162 return result;
1163}
1164
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001165VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001166{
1167 char str[1024];
1168 if (!pBeginInfo) {
1169 sprintf(str, "Struct ptr parameter pBeginInfo to function BeginCommandBuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001170 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001171 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001172 else if (!vk_validate_vkcmdbufferbegininfo(pBeginInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001173 sprintf(str, "Parameter pBeginInfo to function BeginCommandBuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001174 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001175 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001176 VkResult result = nextTable.BeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001177 return result;
1178}
1179
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001180VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001181{
1182
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001183 VkResult result = nextTable.EndCommandBuffer(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001184 return result;
1185}
1186
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001187VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001188{
1189
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001190 VkResult result = nextTable.ResetCommandBuffer(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001191 return result;
1192}
1193
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001194VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001195{
1196 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001197 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001198 sprintf(str, "Parameter pipelineBindPoint to function CmdBindPipeline has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001199 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001200 }
1201 nextTable.CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
1202}
1203
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001204VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001205{
1206 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001207 if (!validate_VkStateBindPoint(stateBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001208 sprintf(str, "Parameter stateBindPoint to function CmdBindDynamicStateObject has invalid value of %i.", (int)stateBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001209 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001210 }
1211 nextTable.CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
1212}
1213
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001214VK_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 -06001215{
1216 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001217 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001218 sprintf(str, "Parameter pipelineBindPoint to function CmdBindDescriptorSets has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001219 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001220 }
1221 nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layoutChain, layoutChainSlot, count, pDescriptorSets, pUserData);
1222}
1223
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001224VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t binding)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001225{
1226
1227 nextTable.CmdBindVertexBuffer(cmdBuffer, buffer, offset, binding);
1228}
1229
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001230VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, VkIndexType indexType)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001231{
1232 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001233 if (!validate_VkIndexType(indexType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001234 sprintf(str, "Parameter indexType to function CmdBindIndexBuffer has invalid value of %i.", (int)indexType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001235 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001236 }
1237 nextTable.CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
1238}
1239
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001240VK_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 -06001241{
1242
1243 nextTable.CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
1244}
1245
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001246VK_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 -06001247{
1248
1249 nextTable.CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
1250}
1251
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001252VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t count, uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001253{
1254
1255 nextTable.CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
1256}
1257
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001258VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t count, uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001259{
1260
1261 nextTable.CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
1262}
1263
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001264VK_LAYER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001265{
1266
1267 nextTable.CmdDispatch(cmdBuffer, x, y, z);
1268}
1269
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001270VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001271{
1272
1273 nextTable.CmdDispatchIndirect(cmdBuffer, buffer, offset);
1274}
1275
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001276VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001277{
1278 char str[1024];
1279 uint32_t i;
1280 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001281 if (!vk_validate_vkbuffercopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001282 sprintf(str, "Parameter pRegions[%i] to function CmdCopyBuffer contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001283 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001284 }
1285 }
1286 nextTable.CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
1287}
1288
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001289VK_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 -06001290{
1291 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001292 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001293 sprintf(str, "Parameter srcImageLayout to function CmdCopyImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001294 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001295 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001296 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001297 sprintf(str, "Parameter destImageLayout to function CmdCopyImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001298 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001299 }
1300 uint32_t i;
1301 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001302 if (!vk_validate_vkimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001303 sprintf(str, "Parameter pRegions[%i] to function CmdCopyImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001304 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001305 }
1306 }
1307 nextTable.CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1308}
1309
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001310VK_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 -06001311{
1312 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001313 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001314 sprintf(str, "Parameter srcImageLayout to function CmdBlitImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001315 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001316 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001317 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001318 sprintf(str, "Parameter destImageLayout to function CmdBlitImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001319 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001320 }
1321 uint32_t i;
1322 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001323 if (!vk_validate_vkimageblit(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001324 sprintf(str, "Parameter pRegions[%i] to function CmdBlitImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001325 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001326 }
1327 }
1328 nextTable.CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1329}
1330
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001331VK_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 -06001332{
1333 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001334 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001335 sprintf(str, "Parameter destImageLayout to function CmdCopyBufferToImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001336 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001337 }
1338 uint32_t i;
1339 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001340 if (!vk_validate_vkbufferimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001341 sprintf(str, "Parameter pRegions[%i] to function CmdCopyBufferToImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001342 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001343 }
1344 }
1345 nextTable.CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
1346}
1347
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001348VK_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 -06001349{
1350 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001351 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001352 sprintf(str, "Parameter srcImageLayout to function CmdCopyImageToBuffer has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001353 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001354 }
1355 uint32_t i;
1356 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001357 if (!vk_validate_vkbufferimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001358 sprintf(str, "Parameter pRegions[%i] to function CmdCopyImageToBuffer contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001359 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001360 }
1361 }
1362 nextTable.CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
1363}
1364
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001365VK_LAYER_EXPORT void VKAPI vkCmdCloneImageData(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001366{
1367 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001368 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001369 sprintf(str, "Parameter srcImageLayout to function CmdCloneImageData has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001370 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001371 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001372 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001373 sprintf(str, "Parameter destImageLayout to function CmdCloneImageData has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001374 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001375 }
1376 nextTable.CmdCloneImageData(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout);
1377}
1378
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001379VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize dataSize, const uint32_t* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001380{
1381
1382 nextTable.CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
1383}
1384
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001385VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize fillSize, uint32_t data)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001386{
1387
1388 nextTable.CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
1389}
1390
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001391VK_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 -06001392{
1393 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001394 if (!validate_VkImageLayout(imageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001395 sprintf(str, "Parameter imageLayout to function CmdClearColorImage has invalid value of %i.", (int)imageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001396 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001397 }
1398 uint32_t i;
1399 for (i = 0; i < rangeCount; i++) {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001400 if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001401 sprintf(str, "Parameter pRanges[%i] to function CmdClearColorImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001402 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001403 }
1404 }
1405 nextTable.CmdClearColorImage(cmdBuffer, image, imageLayout, color, rangeCount, pRanges);
1406}
1407
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001408VK_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 -06001409{
1410 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001411 if (!validate_VkImageLayout(imageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001412 sprintf(str, "Parameter imageLayout to function CmdClearDepthStencil has invalid value of %i.", (int)imageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001413 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001414 }
1415 uint32_t i;
1416 for (i = 0; i < rangeCount; i++) {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001417 if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001418 sprintf(str, "Parameter pRanges[%i] to function CmdClearDepthStencil contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001419 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001420 }
1421 }
1422 nextTable.CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
1423}
1424
Tony Barbour11f74372015-04-13 15:02:52 -06001425VK_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 -06001426{
1427 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001428 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001429 sprintf(str, "Parameter srcImageLayout to function CmdResolveImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001430 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001431 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001432 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001433 sprintf(str, "Parameter destImageLayout to function CmdResolveImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001434 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001435 }
1436 uint32_t i;
Tony Barbour11f74372015-04-13 15:02:52 -06001437 for (i = 0; i < regionCount; i++) {
1438 if (!vk_validate_vkimageresolve(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001439 sprintf(str, "Parameter pRects[%i] to function CmdResolveImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001440 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001441 }
1442 }
Tony Barbour11f74372015-04-13 15:02:52 -06001443 nextTable.CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001444}
1445
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001446VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001447{
1448 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001449 if (!validate_VkPipeEvent(pipeEvent)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001450 sprintf(str, "Parameter pipeEvent to function CmdSetEvent has invalid value of %i.", (int)pipeEvent);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001451 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001452 }
1453 nextTable.CmdSetEvent(cmdBuffer, event, pipeEvent);
1454}
1455
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001456VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001457{
1458 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001459 if (!validate_VkPipeEvent(pipeEvent)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001460 sprintf(str, "Parameter pipeEvent to function CmdResetEvent has invalid value of %i.", (int)pipeEvent);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001461 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001462 }
1463 nextTable.CmdResetEvent(cmdBuffer, event, pipeEvent);
1464}
1465
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001466VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, const VkEventWaitInfo* pWaitInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001467{
1468 char str[1024];
1469 if (!pWaitInfo) {
1470 sprintf(str, "Struct ptr parameter pWaitInfo to function CmdWaitEvents is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001471 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001472 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001473 else if (!vk_validate_vkeventwaitinfo(pWaitInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001474 sprintf(str, "Parameter pWaitInfo to function CmdWaitEvents contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001475 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001476 }
1477 nextTable.CmdWaitEvents(cmdBuffer, pWaitInfo);
1478}
1479
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001480VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, const VkPipelineBarrier* pBarrier)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001481{
1482 char str[1024];
1483 if (!pBarrier) {
1484 sprintf(str, "Struct ptr parameter pBarrier to function CmdPipelineBarrier is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001485 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001486 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001487 else if (!vk_validate_vkpipelinebarrier(pBarrier)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001488 sprintf(str, "Parameter pBarrier to function CmdPipelineBarrier contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001489 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001490 }
1491 nextTable.CmdPipelineBarrier(cmdBuffer, pBarrier);
1492}
1493
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001494VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001495{
1496
1497 nextTable.CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1498}
1499
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001500VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001501{
1502
1503 nextTable.CmdEndQuery(cmdBuffer, queryPool, slot);
1504}
1505
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001506VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001507{
1508
1509 nextTable.CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1510}
1511
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001512VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkGpuSize destOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001513{
1514 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001515 if (!validate_VkTimestampType(timestampType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001516 sprintf(str, "Parameter timestampType to function CmdWriteTimestamp has invalid value of %i.", (int)timestampType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001517 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001518 }
1519 nextTable.CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1520}
1521
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001522VK_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 -06001523{
1524 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001525 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001526 sprintf(str, "Parameter pipelineBindPoint to function CmdInitAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001527 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001528 }
1529 nextTable.CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData);
1530}
1531
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001532VK_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 -06001533{
1534 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001535 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001536 sprintf(str, "Parameter pipelineBindPoint to function CmdLoadAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001537 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001538 }
1539 nextTable.CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset);
1540}
1541
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001542VK_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 -06001543{
1544 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001545 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001546 sprintf(str, "Parameter pipelineBindPoint to function CmdSaveAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001547 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001548 }
1549 nextTable.CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset);
1550}
1551
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001552VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001553{
1554 char str[1024];
1555 if (!pCreateInfo) {
1556 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFramebuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001557 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001558 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001559 else if (!vk_validate_vkframebuffercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001560 sprintf(str, "Parameter pCreateInfo to function CreateFramebuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001561 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001562 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001563 VkResult result = nextTable.CreateFramebuffer(device, pCreateInfo, pFramebuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001564 return result;
1565}
1566
1567
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001568void PreCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001569{
1570 if(pCreateInfo == nullptr)
1571 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001572 char const str[] = "vkCreateRenderPass parameter, VkRenderPassCreateInfo* pCreateInfo, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001573 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001574 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001575 return;
1576 }
1577
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001578 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001579 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001580 char const str[] = "vkCreateRenderPass parameter, VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO "\
1581 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO (precondition).";
1582 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001583 return;
1584 }
1585
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001586 if(!vk_validate_vkrect(&pCreateInfo->renderArea))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001587 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001588 char const str[] = "vkCreateRenderPass parameter, VkRect pCreateInfo->renderArea, is invalid "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001589 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001590 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001591 return;
1592 }
1593
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001594 if(!vk_validate_vkextent2d(&pCreateInfo->extent))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001595 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001596 char const str[] = "vkCreateRenderPass parameter, VkExtent2D pCreateInfo->extent, is invalid "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001597 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001598 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001599 return;
1600 }
1601
1602 if(pCreateInfo->pColorFormats == nullptr)
1603 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001604 char const str[] = "vkCreateRenderPass parameter, VkFormat* pCreateInfo->pColorFormats, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001605 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001606 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001607 return;
1608 }
1609
1610 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1611 {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001612 if(!validate_VkFormat(pCreateInfo->pColorFormats[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001613 {
1614 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001615 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001616 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001617 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001618 continue;
1619 }
1620
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001621 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001622 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001623 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->pColorFormats[i],
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001624 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
1625 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001626 {
1627 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001628 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001629 "], cannot be validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001630 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001631 continue;
1632 }
1633
1634 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
1635 {
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 "], contains unsupported format (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 }
1644
1645 if(pCreateInfo->pColorLayouts == nullptr)
1646 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001647 char const str[] = "vkCreateRenderPass parameter, VkImageLayout* pCreateInfo->pColorLayouts, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001648 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001649 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001650 return;
1651 }
1652
1653 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1654 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001655 if(!validate_VkImageLayout(pCreateInfo->pColorLayouts[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001656 {
1657 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001658 ss << "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pColorLayouts[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001659 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001660 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001661 continue;
1662 }
1663 }
1664
1665 if(pCreateInfo->pColorLoadOps == nullptr)
1666 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001667 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001668 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001669 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001670 return;
1671 }
1672
1673 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1674 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001675 if(!validate_VkAttachmentLoadOp(pCreateInfo->pColorLoadOps[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001676 {
1677 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001678 ss << "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pColorLoadOps[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001679 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001680 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001681 continue;
1682 }
1683 }
1684
1685 if(pCreateInfo->pColorStoreOps == nullptr)
1686 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001687 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001688 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001689 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001690 return;
1691 }
1692
1693 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1694 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001695 if(!validate_VkAttachmentStoreOp(pCreateInfo->pColorStoreOps[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001696 {
1697 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001698 ss << "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pColorStoreOps[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001699 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001700 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001701 continue;
1702 }
1703 }
1704
1705 if(pCreateInfo->pColorLoadClearValues == nullptr)
1706 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001707 char const str[] = "vkCreateRenderPass parameter, VkClearColor* pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001708 "pColorLoadClearValues, is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001709 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001710 return;
1711 }
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001712
1713 if(pCreateInfo->pColorStoreOps == nullptr)
1714 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001715 char const str[] = "vkCreateRenderPass parameter, VK_ATTACHMENT_STORE_OP* pCreateInfo->pColorStoreOps, "\
Jeremy Hayes9bafb9f2015-04-07 13:38:03 -06001716 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001717 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001718 return;
1719 }
1720
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001721 if(pCreateInfo->pColorLoadClearValues == nullptr)
1722 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001723 char const str[] = "vkCreateRenderPass parameter, VK_CLEAR_COLOR* pCreateInfo->"\
Jeremy Hayes9bafb9f2015-04-07 13:38:03 -06001724 "pColorLoadClearValues, is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001725 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001726 return;
1727 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001728
1729 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1730 {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001731 if(!vk_validate_vkclearcolor(&(pCreateInfo->pColorLoadClearValues[i])))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001732 {
1733 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001734 ss << "vkCreateRenderPass parameter, VkClearColor pCreateInfo->pColorLoadClearValues[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001735 "], is invalid (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001736 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001737 continue;
1738 }
1739 }
1740
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001741 if(!validate_VkFormat(pCreateInfo->depthStencilFormat))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001742 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001743 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001744 "depthStencilFormat, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001745 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001746 return;
1747 }
1748
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001749 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001750 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001751 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->depthStencilFormat,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001752 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
1753 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001754 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001755 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001756 "depthStencilFormat, cannot be validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001757 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001758 return;
1759 }
1760
1761 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
1762 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001763 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001764 "depthStencilFormat, contains unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001765 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001766 return;
1767 }
1768
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001769 if(!validate_VkImageLayout(pCreateInfo->depthStencilLayout))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001770 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001771 char const str[] = "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001772 "depthStencilLayout, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001773 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001774 return;
1775 }
1776
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001777 if(!validate_VkAttachmentLoadOp(pCreateInfo->depthLoadOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001778 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001779 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001780 "depthLoadOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001781 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001782 return;
1783 }
1784
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001785 if(!validate_VkAttachmentStoreOp(pCreateInfo->depthStoreOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001786 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001787 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001788 "depthStoreOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001789 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001790 return;
1791 }
1792
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001793 if(!validate_VkAttachmentLoadOp(pCreateInfo->stencilLoadOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001794 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001795 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001796 "stencilLoadOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001797 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001798 return;
1799 }
1800
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001801 if(!validate_VkAttachmentStoreOp(pCreateInfo->stencilStoreOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001802 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001803 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001804 "stencilStoreOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001805 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001806 return;
1807 }
1808}
1809
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001810void PostCreateRenderPass(VkResult result, VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001811{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001812 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001813 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001814 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001815 char const str[] = "vkCreateRenderPass failed (postcondition).";
1816 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001817 return;
1818 }
1819
1820 if(pRenderPass == nullptr)
1821 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001822 char const str[] = "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001823 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001824 return;
1825 }
1826}
1827
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001828VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001829{
1830 PreCreateRenderPass(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001831 VkResult result = nextTable.CreateRenderPass(device, pCreateInfo, pRenderPass);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001832 PostCreateRenderPass(result, pRenderPass);
1833 return result;
1834}
1835
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001836VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001837{
1838 char str[1024];
1839 if (!pRenderPassBegin) {
1840 sprintf(str, "Struct ptr parameter pRenderPassBegin to function CmdBeginRenderPass is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001841 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001842 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001843 else if (!vk_validate_vkrenderpassbegin(pRenderPassBegin)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001844 sprintf(str, "Parameter pRenderPassBegin to function CmdBeginRenderPass contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001845 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001846 }
1847 nextTable.CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1848}
1849
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001850VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001851{
1852
1853 nextTable.CmdEndRenderPass(cmdBuffer, renderPass);
1854}
1855
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001856VK_LAYER_EXPORT VkResult VKAPI vkDbgSetValidationLevel(VkDevice device, VkValidationLevel validationLevel)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001857{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001858 VkResult result = nextTable.DbgSetValidationLevel(device, validationLevel);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001859 return result;
1860}
1861
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001862VK_LAYER_EXPORT VkResult VKAPI vkDbgRegisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, void* pUserData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001863{
1864 // This layer intercepts callbacks
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001865 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 -06001866 if (!pNewDbgFuncNode)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001867 return VK_ERROR_OUT_OF_MEMORY;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001868 pNewDbgFuncNode->pfnMsgCallback = pfnMsgCallback;
1869 pNewDbgFuncNode->pUserData = pUserData;
1870 pNewDbgFuncNode->pNext = g_pDbgFunctionHead;
1871 g_pDbgFunctionHead = pNewDbgFuncNode;
1872 // force callbacks if DebugAction hasn't been set already other than initial value
1873 if (g_actionIsDefault) {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001874 g_debugAction = VK_DBG_LAYER_ACTION_CALLBACK;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001875 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001876 VkResult result = nextTable.DbgRegisterMsgCallback(instance, pfnMsgCallback, pUserData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001877 return result;
1878}
1879
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001880VK_LAYER_EXPORT VkResult VKAPI vkDbgUnregisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001881{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001882 VK_LAYER_DBG_FUNCTION_NODE *pTrav = g_pDbgFunctionHead;
1883 VK_LAYER_DBG_FUNCTION_NODE *pPrev = pTrav;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001884 while (pTrav) {
1885 if (pTrav->pfnMsgCallback == pfnMsgCallback) {
1886 pPrev->pNext = pTrav->pNext;
1887 if (g_pDbgFunctionHead == pTrav)
1888 g_pDbgFunctionHead = pTrav->pNext;
1889 free(pTrav);
1890 break;
1891 }
1892 pPrev = pTrav;
1893 pTrav = pTrav->pNext;
1894 }
1895 if (g_pDbgFunctionHead == NULL)
1896 {
1897 if (g_actionIsDefault)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001898 g_debugAction = VK_DBG_LAYER_ACTION_LOG_MSG;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001899 else
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001900 g_debugAction = (VK_LAYER_DBG_ACTION)(g_debugAction & ~((uint32_t)VK_DBG_LAYER_ACTION_CALLBACK));
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001901 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001902 VkResult result = nextTable.DbgUnregisterMsgCallback(instance, pfnMsgCallback);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001903 return result;
1904}
1905
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001906VK_LAYER_EXPORT VkResult VKAPI vkDbgSetMessageFilter(VkDevice device, int32_t msgCode, VK_DBG_MSG_FILTER filter)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001907{
1908
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001909 VkResult result = nextTable.DbgSetMessageFilter(device, msgCode, filter);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001910 return result;
1911}
1912
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001913VK_LAYER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkBaseObject object, size_t tagSize, const void* pTag)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001914{
1915
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001916 VkResult result = nextTable.DbgSetObjectTag(object, tagSize, pTag);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001917 return result;
1918}
1919
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001920VK_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 -06001921{
1922
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001923 VkResult result = nextTable.DbgSetGlobalOption(instance, dbgOption, dataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001924 return result;
1925}
1926
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001927VK_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 -06001928{
1929
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001930 VkResult result = nextTable.DbgSetDeviceOption(device, dbgOption, dataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001931 return result;
1932}
1933
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001934VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerBegin(VkCmdBuffer cmdBuffer, const char* pMarker)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001935{
1936
1937 nextTable.CmdDbgMarkerBegin(cmdBuffer, pMarker);
1938}
1939
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001940VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerEnd(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001941{
1942
1943 nextTable.CmdDbgMarkerEnd(cmdBuffer);
1944}
1945
1946#if defined(__linux__) || defined(XCB_NVIDIA)
1947
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001948VK_LAYER_EXPORT VkResult VKAPI vkWsiX11AssociateConnection(VkPhysicalGpu gpu, const VK_WSI_X11_CONNECTION_INFO* pConnectionInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001949{
Jon Ashburn630e44f2015-04-08 21:33:34 -06001950 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001951 loader_platform_thread_once(&tabOnce, initParamChecker);
1952
Jon Ashburn630e44f2015-04-08 21:33:34 -06001953 VkResult result = nextTable.WsiX11AssociateConnection(gpu, pConnectionInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001954 return result;
1955}
1956
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001957VK_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 -06001958{
1959
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001960 VkResult result = nextTable.WsiX11GetMSC(device, window, crtc, pMsc);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001961 return result;
1962}
1963
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001964VK_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 -06001965{
1966
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001967 VkResult result = nextTable.WsiX11CreatePresentableImage(device, pCreateInfo, pImage, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001968 return result;
1969}
1970
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001971VK_LAYER_EXPORT VkResult VKAPI vkWsiX11QueuePresent(VkQueue queue, const VK_WSI_X11_PRESENT_INFO* pPresentInfo, VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001972{
1973
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001974 VkResult result = nextTable.WsiX11QueuePresent(queue, pPresentInfo, fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001975 return result;
1976}
1977
1978#endif
1979
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001980#include "vk_generic_intercept_proc_helper.h"
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001981VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalGpu gpu, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001982{
Jon Ashburn301c5f02015-04-06 10:58:22 -06001983 VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001984 void* addr;
1985 if (gpu == NULL)
1986 return NULL;
1987 pCurObj = gpuw;
1988 loader_platform_thread_once(&tabOnce, initParamChecker);
1989
1990 addr = layer_intercept_proc(funcName);
1991 if (addr)
1992 return addr;
1993 else {
1994 if (gpuw->pGPA == NULL)
1995 return NULL;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001996 return gpuw->pGPA((VkPhysicalGpu)gpuw->nextObject, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001997 }
1998}
1999