blob: e87d151e6c0974db3e62113d4e2f7b6bb4fd7609 [file] [log] [blame]
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001/*
2 * Vulkan
3 *
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 */
Courtney Goeltzenleuchterb620ace2015-07-05 11:28:29 -060024#define _GNU_SOURCE
Jon Ashburnfce93d92015-05-12 17:26:48 -060025#include <stdlib.h>
26#include <string.h>
Jon Ashburn2139a3e2015-05-06 09:02:10 -060027
Tobin Ehlis7a51d902015-07-03 10:34:49 -060028#include "vk_loader_platform.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060029#include "loader.h"
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060030#include "debug_report.h"
Ian Elliott1d73e662015-07-06 14:36:13 -060031#include "wsi_swapchain.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060032
Tobin Ehlis3126f012015-05-13 11:57:18 -060033
Jon Ashburn2139a3e2015-05-06 09:02:10 -060034/* Trampoline entrypoints */
Jon Ashburnfce93d92015-05-12 17:26:48 -060035LOADER_EXPORT VkResult VKAPI vkCreateInstance(
Courtney Goeltzenleuchter70c4ebc2015-06-08 15:13:50 -060036 const VkInstanceCreateInfo* pCreateInfo,
37 VkInstance* pInstance)
Jon Ashburnfce93d92015-05-12 17:26:48 -060038{
39 struct loader_instance *ptr_instance = NULL;
Jon Ashburnfce93d92015-05-12 17:26:48 -060040 VkResult res = VK_ERROR_INITIALIZATION_FAILED;
Jon Ashburnfce93d92015-05-12 17:26:48 -060041
Jon Ashburn754f1992015-08-18 18:04:47 -060042 loader_platform_thread_once(&once_init, loader_initialize);
Jon Ashburnfce93d92015-05-12 17:26:48 -060043
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060044 if (pCreateInfo->pAllocCb
45 && pCreateInfo->pAllocCb->pfnAlloc
46 && pCreateInfo->pAllocCb->pfnFree) {
47 ptr_instance = (struct loader_instance *) pCreateInfo->pAllocCb->pfnAlloc(
48 pCreateInfo->pAllocCb->pUserData,
49 sizeof(struct loader_instance),
50 sizeof(VkInstance),
51 VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
52 } else {
53 ptr_instance = (struct loader_instance *) malloc(sizeof(struct loader_instance));
54 }
Jon Ashburnfce93d92015-05-12 17:26:48 -060055 if (ptr_instance == NULL) {
56 return VK_ERROR_OUT_OF_HOST_MEMORY;
57 }
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060058
Jon Ashburn413d6582015-08-28 15:19:27 -060059 tls_instance = ptr_instance;
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060060 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburn182b8302015-08-11 14:49:54 -060061 memset(ptr_instance, 0, sizeof(struct loader_instance));
Jon Ashburncedc15f2015-05-21 18:13:33 -060062
Courtney Goeltzenleuchterb620ace2015-07-05 11:28:29 -060063 if (pCreateInfo->pAllocCb
64 && pCreateInfo->pAllocCb->pfnAlloc
65 && pCreateInfo->pAllocCb->pfnFree) {
66 ptr_instance->alloc_callbacks.pUserData = pCreateInfo->pAllocCb->pUserData;
67 ptr_instance->alloc_callbacks.pfnAlloc = pCreateInfo->pAllocCb->pfnAlloc;
68 ptr_instance->alloc_callbacks.pfnFree = pCreateInfo->pAllocCb->pfnFree;
69 }
70
Jon Ashburne9ca8fa2015-08-20 16:35:30 -060071 /* Due to implicit layers need to get layer list even if
72 * layerCount == 0 and VK_INSTANCE_LAYERS is unset. For now always
73 * get layer list (both instance and device) via loader_layer_scan(). */
74 memset(&ptr_instance->instance_layer_list, 0, sizeof(ptr_instance->instance_layer_list));
75 memset(&ptr_instance->device_layer_list, 0, sizeof(ptr_instance->device_layer_list));
Jon Ashburne58f1a32015-08-28 13:38:21 -060076 loader_layer_scan(ptr_instance,
77
78
79 &ptr_instance->instance_layer_list,
80 &ptr_instance->device_layer_list);
Jon Ashburne9ca8fa2015-08-20 16:35:30 -060081
82 /* validate the app requested layers to be enabled */
83 if (pCreateInfo->layerCount > 0) {
84 res = loader_validate_layers(pCreateInfo->layerCount,
85 pCreateInfo->ppEnabledLayerNames,
86 &ptr_instance->instance_layer_list);
87 if (res != VK_SUCCESS) {
Jon Ashburn19d11ea2015-10-09 09:40:30 -060088 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburne9ca8fa2015-08-20 16:35:30 -060089 return res;
90 }
91 }
92
Jon Ashburn754f1992015-08-18 18:04:47 -060093 /* Scan/discover all ICD libraries */
94 memset(&ptr_instance->icd_libs, 0, sizeof(ptr_instance->icd_libs));
Jon Ashburne58f1a32015-08-28 13:38:21 -060095 loader_icd_scan(ptr_instance, &ptr_instance->icd_libs);
Jon Ashburn754f1992015-08-18 18:04:47 -060096
Jon Ashburncfe4e682015-08-14 12:51:47 -060097 /* get extensions from all ICD's, merge so no duplicates, then validate */
Jon Ashburne58f1a32015-08-28 13:38:21 -060098 loader_get_icd_loader_instance_extensions(ptr_instance,
99 &ptr_instance->icd_libs,
100 &ptr_instance->ext_list);
101 res = loader_validate_instance_extensions(&ptr_instance->ext_list,
102 &ptr_instance->instance_layer_list,
103 pCreateInfo);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600104 if (res != VK_SUCCESS) {
Jon Ashburne58f1a32015-08-28 13:38:21 -0600105 loader_delete_layer_properties(ptr_instance,
106 &ptr_instance->device_layer_list);
107 loader_delete_layer_properties(ptr_instance,
108 &ptr_instance->instance_layer_list);
109 loader_scanned_icd_clear(ptr_instance, &ptr_instance->icd_libs);
110 loader_destroy_ext_list(ptr_instance, &ptr_instance->ext_list);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600111 loader_platform_thread_unlock_mutex(&loader_lock);
112 loader_heap_free(ptr_instance, ptr_instance);
113 return res;
114 }
115
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600116 ptr_instance->disp = loader_heap_alloc(
117 ptr_instance,
118 sizeof(VkLayerInstanceDispatchTable),
119 VK_SYSTEM_ALLOC_TYPE_INTERNAL);
120 if (ptr_instance->disp == NULL) {
Jon Ashburne58f1a32015-08-28 13:38:21 -0600121 loader_delete_layer_properties(ptr_instance,
122 &ptr_instance->device_layer_list);
123 loader_delete_layer_properties(ptr_instance,
124 &ptr_instance->instance_layer_list);
125 loader_scanned_icd_clear(ptr_instance,
126 &ptr_instance->icd_libs);
127 loader_destroy_ext_list(ptr_instance,
128 &ptr_instance->ext_list);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600129 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600130 loader_heap_free(ptr_instance, ptr_instance);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600131 return VK_ERROR_OUT_OF_HOST_MEMORY;
132 }
133 memcpy(ptr_instance->disp, &instance_disp, sizeof(instance_disp));
134 ptr_instance->next = loader.instances;
135 loader.instances = ptr_instance;
136
Jon Ashburn182b8302015-08-11 14:49:54 -0600137 /* activate any layers on instance chain */
Jon Ashburne58f1a32015-08-28 13:38:21 -0600138 res = loader_enable_instance_layers(ptr_instance,
139 pCreateInfo,
140 &ptr_instance->instance_layer_list);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600141 if (res != VK_SUCCESS) {
Jon Ashburne58f1a32015-08-28 13:38:21 -0600142 loader_delete_layer_properties(ptr_instance,
143 &ptr_instance->device_layer_list);
144 loader_delete_layer_properties(ptr_instance,
145 &ptr_instance->instance_layer_list);
146 loader_scanned_icd_clear(ptr_instance,
147 &ptr_instance->icd_libs);
148 loader_destroy_ext_list(ptr_instance,
149 &ptr_instance->ext_list);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600150 loader.instances = ptr_instance->next;
151 loader_platform_thread_unlock_mutex(&loader_lock);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600152 loader_heap_free(ptr_instance, ptr_instance->disp);
153 loader_heap_free(ptr_instance, ptr_instance);
154 return res;
155 }
Jon Ashburn182b8302015-08-11 14:49:54 -0600156 loader_activate_instance_layers(ptr_instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600157
Ian Elliott1d73e662015-07-06 14:36:13 -0600158 wsi_swapchain_create_instance(ptr_instance, pCreateInfo);
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600159 debug_report_create_instance(ptr_instance, pCreateInfo);
Jon Ashburncedc15f2015-05-21 18:13:33 -0600160
Jon Ashburnfce93d92015-05-12 17:26:48 -0600161
Jon Ashburnfce93d92015-05-12 17:26:48 -0600162 *pInstance = (VkInstance) ptr_instance;
Jon Ashburna179dcf2015-05-21 17:42:17 -0600163
164 res = ptr_instance->disp->CreateInstance(pCreateInfo, pInstance);
165
Courtney Goeltzenleuchter23b5f8d2015-06-17 20:51:59 -0600166 /*
167 * Finally have the layers in place and everyone has seen
168 * the CreateInstance command go by. This allows the layer's
169 * GetInstanceProcAddr functions to return valid extension functions
170 * if enabled.
171 */
172 loader_activate_instance_layer_extensions(ptr_instance);
173
Jon Ashburnb40f2562015-05-29 13:15:39 -0600174 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600175 return res;
176}
177
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600178LOADER_EXPORT void VKAPI vkDestroyInstance(
Jon Ashburnfce93d92015-05-12 17:26:48 -0600179 VkInstance instance)
180{
181 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn0c5eea22015-09-30 12:56:42 -0600182 struct loader_instance *ptr_instance = NULL;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600183 disp = loader_get_instance_dispatch(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600184
Jon Ashburnb40f2562015-05-29 13:15:39 -0600185 loader_platform_thread_lock_mutex(&loader_lock);
186
Jon Ashburn0c5eea22015-09-30 12:56:42 -0600187 ptr_instance = loader_get_instance(instance);
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600188 disp->DestroyInstance(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600189
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600190 loader_deactivate_instance_layers(ptr_instance);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600191 loader_heap_free(ptr_instance, ptr_instance->disp);
192 loader_heap_free(ptr_instance, ptr_instance);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600193 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600194}
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600195
Jon Ashburnfce93d92015-05-12 17:26:48 -0600196LOADER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
197 VkInstance instance,
198 uint32_t* pPhysicalDeviceCount,
199 VkPhysicalDevice* pPhysicalDevices)
200{
201 const VkLayerInstanceDispatchTable *disp;
Jon Ashburnb40f2562015-05-29 13:15:39 -0600202 VkResult res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600203 disp = loader_get_instance_dispatch(instance);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600204
205 loader_platform_thread_lock_mutex(&loader_lock);
206 res = disp->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount,
Jon Ashburnfce93d92015-05-12 17:26:48 -0600207 pPhysicalDevices);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600208 loader_platform_thread_unlock_mutex(&loader_lock);
209 return res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600210}
211
Jon Ashburn4e189562015-07-23 18:49:07 -0600212
213
214
215
216
217LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
218 VkPhysicalDevice gpu,
219 VkPhysicalDeviceFeatures *pFeatures)
220{
221 const VkLayerInstanceDispatchTable *disp;
222 VkResult res;
223
224 disp = loader_get_instance_dispatch(gpu);
225 res = disp->GetPhysicalDeviceFeatures(gpu, pFeatures);
226 return res;
227}
228
229LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
230 VkPhysicalDevice gpu,
231 VkFormat format,
232 VkFormatProperties *pFormatInfo)
233{
234 const VkLayerInstanceDispatchTable *disp;
235 VkResult res;
236
237 disp = loader_get_instance_dispatch(gpu);
238 res = disp->GetPhysicalDeviceFormatProperties(gpu, format, pFormatInfo);
239 return res;
240}
241
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -0600242LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties)
Jon Ashburn4e189562015-07-23 18:49:07 -0600243{
244 const VkLayerInstanceDispatchTable *disp;
245 VkResult res;
246
247 disp = loader_get_instance_dispatch(physicalDevice);
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -0600248 res = disp->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jon Ashburn4e189562015-07-23 18:49:07 -0600249 return res;
250}
251
Tony Barbour426b9052015-06-24 16:06:58 -0600252LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
Jon Ashburnfce93d92015-05-12 17:26:48 -0600253 VkPhysicalDevice gpu,
Tony Barbour426b9052015-06-24 16:06:58 -0600254 VkPhysicalDeviceProperties* pProperties)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600255{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600256 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600257 VkResult res;
258
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600259 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600260 res = disp->GetPhysicalDeviceProperties(gpu, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600261 return res;
262}
263
Cody Northropef72e2a2015-08-03 17:04:53 -0600264LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Tony Barbour426b9052015-06-24 16:06:58 -0600265 VkPhysicalDevice gpu,
Cody Northropef72e2a2015-08-03 17:04:53 -0600266 uint32_t* pCount,
267 VkQueueFamilyProperties* pQueueProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600268{
269 const VkLayerInstanceDispatchTable *disp;
270 VkResult res;
271
272 disp = loader_get_instance_dispatch(gpu);
Cody Northropef72e2a2015-08-03 17:04:53 -0600273 res = disp->GetPhysicalDeviceQueueFamilyProperties(gpu, pCount, pQueueProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600274 return res;
275}
276
277LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
278 VkPhysicalDevice gpu,
279 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
280{
281 const VkLayerInstanceDispatchTable *disp;
282 VkResult res;
283
284 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600285 res = disp->GetPhysicalDeviceMemoryProperties(gpu, pMemoryProperties);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600286 return res;
287}
288
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600289LOADER_EXPORT VkResult VKAPI vkCreateDevice(
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600290 VkPhysicalDevice gpu,
291 const VkDeviceCreateInfo* pCreateInfo,
292 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600293{
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600294 VkResult res;
295
Jon Ashburnb40f2562015-05-29 13:15:39 -0600296 loader_platform_thread_lock_mutex(&loader_lock);
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600297
298 res = loader_CreateDevice(gpu, pCreateInfo, pDevice);
299
Jon Ashburnb40f2562015-05-29 13:15:39 -0600300 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600301 return res;
302}
303
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600304LOADER_EXPORT void VKAPI vkDestroyDevice(VkDevice device)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600305{
306 const VkLayerDispatchTable *disp;
Jon Ashburne58f1a32015-08-28 13:38:21 -0600307 struct loader_device *dev;
308 struct loader_icd *icd = loader_get_icd_and_device(device, &dev);
309 const struct loader_instance *inst = icd->this_instance;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600310 disp = loader_get_dispatch(device);
311
Jon Ashburnb40f2562015-05-29 13:15:39 -0600312 loader_platform_thread_lock_mutex(&loader_lock);
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600313 disp->DestroyDevice(device);
Jon Ashburne58f1a32015-08-28 13:38:21 -0600314 loader_remove_logical_device(inst, device);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600315 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600316}
317
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600318LOADER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600319 VkPhysicalDevice physicalDevice,
320 const char* pLayerName,
321 uint32_t* pCount,
322 VkExtensionProperties* pProperties)
Jon Ashburnb40f2562015-05-29 13:15:39 -0600323{
324 VkResult res;
325
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600326 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburn0bf6a182015-07-16 17:19:31 -0600327 //TODO convert over to using instance chain dispatch
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600328 res = loader_EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties);
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600329 loader_platform_thread_unlock_mutex(&loader_lock);
Tony Barbour426b9052015-06-24 16:06:58 -0600330 return res;
331}
332
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600333LOADER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600334 VkPhysicalDevice physicalDevice,
335 uint32_t* pCount,
336 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600337{
338 VkResult res;
339
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600340 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburn0bf6a182015-07-16 17:19:31 -0600341 //TODO convert over to using instance chain dispatch
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600342 res = loader_EnumerateDeviceLayerProperties(physicalDevice, pCount, pProperties);
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600343 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600344 return res;
345}
346
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600347LOADER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
348{
349 const VkLayerDispatchTable *disp;
350 VkResult res;
351
352 disp = loader_get_dispatch(device);
353
354 res = disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
355 if (res == VK_SUCCESS) {
356 loader_set_dispatch(*pQueue, disp);
357 }
358
359 return res;
360}
361
362LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
363{
364 const VkLayerDispatchTable *disp;
365
366 disp = loader_get_dispatch(queue);
367
368 return disp->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
369}
370
371LOADER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
372{
373 const VkLayerDispatchTable *disp;
374
375 disp = loader_get_dispatch(queue);
376
377 return disp->QueueWaitIdle(queue);
378}
379
380LOADER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
381{
382 const VkLayerDispatchTable *disp;
383
384 disp = loader_get_dispatch(device);
385
386 return disp->DeviceWaitIdle(device);
387}
388
389LOADER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem)
390{
391 const VkLayerDispatchTable *disp;
392
393 disp = loader_get_dispatch(device);
394
395 return disp->AllocMemory(device, pAllocInfo, pMem);
396}
397
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600398LOADER_EXPORT void VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600399{
400 const VkLayerDispatchTable *disp;
401
402 disp = loader_get_dispatch(device);
403
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600404 disp->FreeMemory(device, mem);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600405}
406
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600407LOADER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
408{
409 const VkLayerDispatchTable *disp;
410
411 disp = loader_get_dispatch(device);
412
413 return disp->MapMemory(device, mem, offset, size, flags, ppData);
414}
415
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600416LOADER_EXPORT void VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600417{
418 const VkLayerDispatchTable *disp;
419
420 disp = loader_get_dispatch(device);
421
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600422 disp->UnmapMemory(device, mem);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600423}
424
425LOADER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
426{
427 const VkLayerDispatchTable *disp;
428
429 disp = loader_get_dispatch(device);
430
431 return disp->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
432}
433
434LOADER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
435{
436 const VkLayerDispatchTable *disp;
437
438 disp = loader_get_dispatch(device);
439
440 return disp->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
441}
442
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -0600443LOADER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
444{
445 const VkLayerDispatchTable *disp;
446
447 disp = loader_get_dispatch(device);
448
449 return disp->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
450}
451
Tony Barbourde4124d2015-07-03 10:33:54 -0600452LOADER_EXPORT VkResult VKAPI vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600453{
454 const VkLayerDispatchTable *disp;
455
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500456 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600457
Tony Barbourde4124d2015-07-03 10:33:54 -0600458 return disp->BindBufferMemory(device, buffer, mem, offset);
459}
460
461LOADER_EXPORT VkResult VKAPI vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize offset)
462{
463 const VkLayerDispatchTable *disp;
464
465 disp = loader_get_dispatch(device);
466
467 return disp->BindImageMemory(device, image, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600468}
469
Jon Ashburn4e189562015-07-23 18:49:07 -0600470LOADER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements)
471{
472 const VkLayerDispatchTable *disp;
473
474 disp = loader_get_dispatch(device);
475
476 return disp->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
477}
478
479LOADER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements)
480{
481 const VkLayerDispatchTable *disp;
482
483 disp = loader_get_dispatch(device);
484
485 return disp->GetImageMemoryRequirements(device, image, pMemoryRequirements);
486}
487
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600488LOADER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600489{
490 const VkLayerDispatchTable *disp;
491
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600492 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600493
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600494 return disp->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600495}
496
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600497LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties)
498{
499 const VkLayerInstanceDispatchTable *disp;
500
501 disp = loader_get_instance_dispatch(physicalDevice);
502
503 return disp->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
504}
505
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600506LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo)
507{
508 const VkLayerDispatchTable *disp;
509
510 disp = loader_get_dispatch(queue);
511
512 return disp->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
513}
514
Jon Ashburn4e189562015-07-23 18:49:07 -0600515LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo)
516{
517 const VkLayerDispatchTable *disp;
518
519 disp = loader_get_dispatch(queue);
520
521 return disp->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
522}
523
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600524LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo)
525{
526 const VkLayerDispatchTable *disp;
527
528 disp = loader_get_dispatch(queue);
529
530 return disp->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600531}
532
533LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
534{
535 const VkLayerDispatchTable *disp;
536
537 disp = loader_get_dispatch(device);
538
539 return disp->CreateFence(device, pCreateInfo, pFence);
540}
541
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600542LOADER_EXPORT void VKAPI vkDestroyFence(VkDevice device, VkFence fence)
Tony Barbourde4124d2015-07-03 10:33:54 -0600543{
544 const VkLayerDispatchTable *disp;
545
546 disp = loader_get_dispatch(device);
547
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600548 disp->DestroyFence(device, fence);
Tony Barbourde4124d2015-07-03 10:33:54 -0600549}
550
Courtney Goeltzenleuchterf2e33ad2015-06-18 17:28:20 -0600551LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600552{
553 const VkLayerDispatchTable *disp;
554
555 disp = loader_get_dispatch(device);
556
557 return disp->ResetFences(device, fenceCount, pFences);
558}
559
560LOADER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
561{
562 const VkLayerDispatchTable *disp;
563
564 disp = loader_get_dispatch(device);
565
566 return disp->GetFenceStatus(device, fence);
567}
568
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -0600569LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600570{
571 const VkLayerDispatchTable *disp;
572
573 disp = loader_get_dispatch(device);
574
575 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
576}
577
578LOADER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
579{
580 const VkLayerDispatchTable *disp;
581
582 disp = loader_get_dispatch(device);
583
584 return disp->CreateSemaphore(device, pCreateInfo, pSemaphore);
585}
586
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600587LOADER_EXPORT void VKAPI vkDestroySemaphore(VkDevice device, VkSemaphore semaphore)
Tony Barbourde4124d2015-07-03 10:33:54 -0600588{
589 const VkLayerDispatchTable *disp;
590
591 disp = loader_get_dispatch(device);
592
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600593 disp->DestroySemaphore(device, semaphore);
Tony Barbourde4124d2015-07-03 10:33:54 -0600594}
595
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600596LOADER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
597{
598 const VkLayerDispatchTable *disp;
599
600 disp = loader_get_dispatch(queue);
601
602 return disp->QueueSignalSemaphore(queue, semaphore);
603}
604
605LOADER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
606{
607 const VkLayerDispatchTable *disp;
608
609 disp = loader_get_dispatch(queue);
610
611 return disp->QueueWaitSemaphore(queue, semaphore);
612}
613
614LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
615{
616 const VkLayerDispatchTable *disp;
617
618 disp = loader_get_dispatch(device);
619
620 return disp->CreateEvent(device, pCreateInfo, pEvent);
621}
622
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600623LOADER_EXPORT void VKAPI vkDestroyEvent(VkDevice device, VkEvent event)
Tony Barbourde4124d2015-07-03 10:33:54 -0600624{
625 const VkLayerDispatchTable *disp;
626
627 disp = loader_get_dispatch(device);
628
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600629 disp->DestroyEvent(device, event);
Tony Barbourde4124d2015-07-03 10:33:54 -0600630}
631
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600632LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
633{
634 const VkLayerDispatchTable *disp;
635
636 disp = loader_get_dispatch(device);
637
638 return disp->GetEventStatus(device, event);
639}
640
641LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
642{
643 const VkLayerDispatchTable *disp;
644
645 disp = loader_get_dispatch(device);
646
647 return disp->SetEvent(device, event);
648}
649
650LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
651{
652 const VkLayerDispatchTable *disp;
653
654 disp = loader_get_dispatch(device);
655
656 return disp->ResetEvent(device, event);
657}
658
659LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
660{
661 const VkLayerDispatchTable *disp;
662
663 disp = loader_get_dispatch(device);
664
665 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool);
666}
667
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600668LOADER_EXPORT void VKAPI vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool)
Tony Barbourde4124d2015-07-03 10:33:54 -0600669{
670 const VkLayerDispatchTable *disp;
671
672 disp = loader_get_dispatch(device);
673
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600674 disp->DestroyQueryPool(device, queryPool);
Tony Barbourde4124d2015-07-03 10:33:54 -0600675}
676
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600677LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
678{
679 const VkLayerDispatchTable *disp;
680
681 disp = loader_get_dispatch(device);
682
683 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
684}
685
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600686LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
687{
688 const VkLayerDispatchTable *disp;
689
690 disp = loader_get_dispatch(device);
691
692 return disp->CreateBuffer(device, pCreateInfo, pBuffer);
693}
694
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600695LOADER_EXPORT void VKAPI vkDestroyBuffer(VkDevice device, VkBuffer buffer)
Tony Barbourde4124d2015-07-03 10:33:54 -0600696{
697 const VkLayerDispatchTable *disp;
698
699 disp = loader_get_dispatch(device);
700
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600701 disp->DestroyBuffer(device, buffer);
Tony Barbourde4124d2015-07-03 10:33:54 -0600702}
703
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600704LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
705{
706 const VkLayerDispatchTable *disp;
707
708 disp = loader_get_dispatch(device);
709
710 return disp->CreateBufferView(device, pCreateInfo, pView);
711}
712
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600713LOADER_EXPORT void VKAPI vkDestroyBufferView(VkDevice device, VkBufferView bufferView)
Tony Barbourde4124d2015-07-03 10:33:54 -0600714{
715 const VkLayerDispatchTable *disp;
716
717 disp = loader_get_dispatch(device);
718
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600719 disp->DestroyBufferView(device, bufferView);
Tony Barbourde4124d2015-07-03 10:33:54 -0600720}
721
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600722LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
723{
724 const VkLayerDispatchTable *disp;
725
726 disp = loader_get_dispatch(device);
727
728 return disp->CreateImage(device, pCreateInfo, pImage);
729}
730
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600731LOADER_EXPORT void VKAPI vkDestroyImage(VkDevice device, VkImage image)
Tony Barbourde4124d2015-07-03 10:33:54 -0600732{
733 const VkLayerDispatchTable *disp;
734
735 disp = loader_get_dispatch(device);
736
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600737 disp->DestroyImage(device, image);
Tony Barbourde4124d2015-07-03 10:33:54 -0600738}
739
Tony Barbour426b9052015-06-24 16:06:58 -0600740LOADER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600741{
742 const VkLayerDispatchTable *disp;
743
744 disp = loader_get_dispatch(device);
745
Tony Barbour426b9052015-06-24 16:06:58 -0600746 return disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600747}
748
749LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
750{
751 const VkLayerDispatchTable *disp;
752
753 disp = loader_get_dispatch(device);
754
755 return disp->CreateImageView(device, pCreateInfo, pView);
756}
757
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600758LOADER_EXPORT void VKAPI vkDestroyImageView(VkDevice device, VkImageView imageView)
Tony Barbourde4124d2015-07-03 10:33:54 -0600759{
760 const VkLayerDispatchTable *disp;
761
762 disp = loader_get_dispatch(device);
763
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600764 disp->DestroyImageView(device, imageView);
Tony Barbourde4124d2015-07-03 10:33:54 -0600765}
766
Courtney Goeltzenleuchter0b29b0d2015-06-24 18:24:19 -0600767LOADER_EXPORT VkResult VKAPI vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShader)
768{
769 const VkLayerDispatchTable *disp;
770
771 disp = loader_get_dispatch(device);
772
773 return disp->CreateShaderModule(device, pCreateInfo, pShader);
774}
775
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600776LOADER_EXPORT void VKAPI vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule)
Tony Barbourde4124d2015-07-03 10:33:54 -0600777{
778 const VkLayerDispatchTable *disp;
779
780 disp = loader_get_dispatch(device);
781
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600782 disp->DestroyShaderModule(device, shaderModule);
Tony Barbourde4124d2015-07-03 10:33:54 -0600783}
784
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600785LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
786{
787 const VkLayerDispatchTable *disp;
788
789 disp = loader_get_dispatch(device);
790
791 return disp->CreateShader(device, pCreateInfo, pShader);
792}
793
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600794LOADER_EXPORT void VKAPI vkDestroyShader(VkDevice device, VkShader shader)
Tony Barbourde4124d2015-07-03 10:33:54 -0600795{
796 const VkLayerDispatchTable *disp;
797
798 disp = loader_get_dispatch(device);
799
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600800 disp->DestroyShader(device, shader);
Tony Barbourde4124d2015-07-03 10:33:54 -0600801}
802
Jon Ashburn0d60d272015-07-09 15:02:25 -0600803LOADER_EXPORT VkResult VKAPI vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600804{
805 const VkLayerDispatchTable *disp;
806
807 disp = loader_get_dispatch(device);
808
Jon Ashburn0d60d272015-07-09 15:02:25 -0600809 return disp->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600810}
811
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600812LOADER_EXPORT void VKAPI vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600813{
814 const VkLayerDispatchTable *disp;
815
816 disp = loader_get_dispatch(device);
817
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600818 disp->DestroyPipelineCache(device, pipelineCache);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600819}
820
Jon Ashburn0d60d272015-07-09 15:02:25 -0600821LOADER_EXPORT size_t VKAPI vkGetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600822{
823 const VkLayerDispatchTable *disp;
824
825 disp = loader_get_dispatch(device);
826
Jon Ashburn0d60d272015-07-09 15:02:25 -0600827 return disp->GetPipelineCacheSize(device, pipelineCache);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600828}
829
Jon Ashburn0d60d272015-07-09 15:02:25 -0600830LOADER_EXPORT VkResult VKAPI vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, void* pData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600831{
832 const VkLayerDispatchTable *disp;
833
834 disp = loader_get_dispatch(device);
835
Jon Ashburn0d60d272015-07-09 15:02:25 -0600836 return disp->GetPipelineCacheData(device, pipelineCache, pData);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600837}
838
Jon Ashburn0d60d272015-07-09 15:02:25 -0600839LOADER_EXPORT VkResult VKAPI vkMergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600840{
841 const VkLayerDispatchTable *disp;
842
843 disp = loader_get_dispatch(device);
844
Jon Ashburn0d60d272015-07-09 15:02:25 -0600845 return disp->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600846}
847
Jon Ashburn0d60d272015-07-09 15:02:25 -0600848LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600849{
850 const VkLayerDispatchTable *disp;
851
852 disp = loader_get_dispatch(device);
853
Jon Ashburn0d60d272015-07-09 15:02:25 -0600854 return disp->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
855}
856
857LOADER_EXPORT VkResult VKAPI vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines)
858{
859 const VkLayerDispatchTable *disp;
860
861 disp = loader_get_dispatch(device);
862
863 return disp->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600864}
865
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600866LOADER_EXPORT void VKAPI vkDestroyPipeline(VkDevice device, VkPipeline pipeline)
Tony Barbourde4124d2015-07-03 10:33:54 -0600867{
868 const VkLayerDispatchTable *disp;
869
870 disp = loader_get_dispatch(device);
871
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600872 disp->DestroyPipeline(device, pipeline);
Tony Barbourde4124d2015-07-03 10:33:54 -0600873}
874
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600875LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
876{
877 const VkLayerDispatchTable *disp;
878
879 disp = loader_get_dispatch(device);
880
881 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
882}
883
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600884LOADER_EXPORT void VKAPI vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout)
Tony Barbourde4124d2015-07-03 10:33:54 -0600885{
886 const VkLayerDispatchTable *disp;
887
888 disp = loader_get_dispatch(device);
889
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600890 disp->DestroyPipelineLayout(device, pipelineLayout);
Tony Barbourde4124d2015-07-03 10:33:54 -0600891}
892
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600893LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
894{
895 const VkLayerDispatchTable *disp;
896
897 disp = loader_get_dispatch(device);
898
899 return disp->CreateSampler(device, pCreateInfo, pSampler);
900}
901
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600902LOADER_EXPORT void VKAPI vkDestroySampler(VkDevice device, VkSampler sampler)
Tony Barbourde4124d2015-07-03 10:33:54 -0600903{
904 const VkLayerDispatchTable *disp;
905
906 disp = loader_get_dispatch(device);
907
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600908 disp->DestroySampler(device, sampler);
Tony Barbourde4124d2015-07-03 10:33:54 -0600909}
910
911
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600912LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
913{
914 const VkLayerDispatchTable *disp;
915
916 disp = loader_get_dispatch(device);
917
918 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
919}
920
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600921LOADER_EXPORT void VKAPI vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout)
Tony Barbourde4124d2015-07-03 10:33:54 -0600922{
923 const VkLayerDispatchTable *disp;
924
925 disp = loader_get_dispatch(device);
926
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600927 disp->DestroyDescriptorSetLayout(device, descriptorSetLayout);
Tony Barbourde4124d2015-07-03 10:33:54 -0600928}
929
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -0600930LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600931{
932 const VkLayerDispatchTable *disp;
933
934 disp = loader_get_dispatch(device);
935
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -0600936 return disp->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600937}
938
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600939LOADER_EXPORT void VKAPI vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
Tony Barbourde4124d2015-07-03 10:33:54 -0600940{
941 const VkLayerDispatchTable *disp;
942
943 disp = loader_get_dispatch(device);
944
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600945 disp->DestroyDescriptorPool(device, descriptorPool);
Tony Barbourde4124d2015-07-03 10:33:54 -0600946}
947
948
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600949LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
950{
951 const VkLayerDispatchTable *disp;
952
953 disp = loader_get_dispatch(device);
954
955 return disp->ResetDescriptorPool(device, descriptorPool);
956}
957
Cody Northropc8aa4a52015-08-03 12:47:29 -0600958LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600959{
960 const VkLayerDispatchTable *disp;
961
962 disp = loader_get_dispatch(device);
963
Cody Northropc8aa4a52015-08-03 12:47:29 -0600964 return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600965}
966
Tony Barbourb857d312015-07-10 10:50:45 -0600967LOADER_EXPORT VkResult VKAPI vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
968{
969 const VkLayerDispatchTable *disp;
970
971 disp = loader_get_dispatch(device);
972
973 return disp->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
974}
975
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600976LOADER_EXPORT void VKAPI vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600977{
978 const VkLayerDispatchTable *disp;
979
980 disp = loader_get_dispatch(device);
981
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600982 disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600983}
984
Jon Ashburn4e189562015-07-23 18:49:07 -0600985LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
986{
987 const VkLayerDispatchTable *disp;
988
989 disp = loader_get_dispatch(device);
990
991 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
992}
993
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600994LOADER_EXPORT void VKAPI vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer)
Jon Ashburn4e189562015-07-23 18:49:07 -0600995{
996 const VkLayerDispatchTable *disp;
997
998 disp = loader_get_dispatch(device);
999
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001000 disp->DestroyFramebuffer(device, framebuffer);
Jon Ashburn4e189562015-07-23 18:49:07 -06001001}
1002
1003LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
1004{
1005 const VkLayerDispatchTable *disp;
1006
1007 disp = loader_get_dispatch(device);
1008
1009 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass);
1010}
1011
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001012LOADER_EXPORT void VKAPI vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass)
Jon Ashburn4e189562015-07-23 18:49:07 -06001013{
1014 const VkLayerDispatchTable *disp;
1015
1016 disp = loader_get_dispatch(device);
1017
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001018 disp->DestroyRenderPass(device, renderPass);
Jon Ashburn4e189562015-07-23 18:49:07 -06001019}
1020
1021LOADER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity)
1022{
1023 const VkLayerDispatchTable *disp;
1024
1025 disp = loader_get_dispatch(device);
1026
1027 return disp->GetRenderAreaGranularity(device, renderPass, pGranularity);
1028}
1029
Cody Northropf02f9f82015-07-09 18:08:05 -06001030LOADER_EXPORT VkResult VKAPI vkCreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool)
1031{
1032 const VkLayerDispatchTable *disp;
1033
1034 disp = loader_get_dispatch(device);
1035
1036 return disp->CreateCommandPool(device, pCreateInfo, pCmdPool);
1037}
1038
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001039LOADER_EXPORT void VKAPI vkDestroyCommandPool(VkDevice device, VkCmdPool cmdPool)
Cody Northropf02f9f82015-07-09 18:08:05 -06001040{
1041 const VkLayerDispatchTable *disp;
1042
1043 disp = loader_get_dispatch(device);
1044
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001045 disp->DestroyCommandPool(device, cmdPool);
Cody Northropf02f9f82015-07-09 18:08:05 -06001046}
1047
1048LOADER_EXPORT VkResult VKAPI vkResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags)
1049{
1050 const VkLayerDispatchTable *disp;
1051
1052 disp = loader_get_dispatch(device);
1053
1054 return disp->ResetCommandPool(device, cmdPool, flags);
1055}
1056
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001057LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
1058{
1059 const VkLayerDispatchTable *disp;
1060 VkResult res;
1061
1062 disp = loader_get_dispatch(device);
1063
1064 res = disp->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
1065 if (res == VK_SUCCESS) {
1066 loader_init_dispatch(*pCmdBuffer, disp);
1067 }
1068
1069 return res;
1070}
1071
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001072LOADER_EXPORT void VKAPI vkDestroyCommandBuffer(VkDevice device, VkCmdBuffer cmdBuffer)
Tony Barbourde4124d2015-07-03 10:33:54 -06001073{
1074 const VkLayerDispatchTable *disp;
1075
1076 disp = loader_get_dispatch(device);
1077
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001078 disp->DestroyCommandBuffer(device, cmdBuffer);
Tony Barbourde4124d2015-07-03 10:33:54 -06001079}
1080
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001081LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
1082{
1083 const VkLayerDispatchTable *disp;
1084
1085 disp = loader_get_dispatch(cmdBuffer);
1086
1087 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo);
1088}
1089
1090LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
1091{
1092 const VkLayerDispatchTable *disp;
1093
1094 disp = loader_get_dispatch(cmdBuffer);
1095
1096 return disp->EndCommandBuffer(cmdBuffer);
1097}
1098
Cody Northropf02f9f82015-07-09 18:08:05 -06001099LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001100{
1101 const VkLayerDispatchTable *disp;
1102
1103 disp = loader_get_dispatch(cmdBuffer);
1104
Cody Northropf02f9f82015-07-09 18:08:05 -06001105 return disp->ResetCommandBuffer(cmdBuffer, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001106}
1107
1108LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
1109{
1110 const VkLayerDispatchTable *disp;
1111
1112 disp = loader_get_dispatch(cmdBuffer);
1113
1114 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
1115}
1116
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06001117LOADER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001118{
1119 const VkLayerDispatchTable *disp;
1120
1121 disp = loader_get_dispatch(cmdBuffer);
1122
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06001123 disp->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
1124}
1125
1126LOADER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
1127{
1128 const VkLayerDispatchTable *disp;
1129
1130 disp = loader_get_dispatch(cmdBuffer);
1131
1132 disp->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Tony Barbourde4124d2015-07-03 10:33:54 -06001133}
1134
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001135LOADER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Tony Barbourde4124d2015-07-03 10:33:54 -06001136{
1137 const VkLayerDispatchTable *disp;
1138
1139 disp = loader_get_dispatch(cmdBuffer);
1140
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001141 disp->CmdSetLineWidth(cmdBuffer, lineWidth);
Cody Northropf5bd2252015-08-17 11:10:49 -06001142}
1143
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001144LOADER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Cody Northropf5bd2252015-08-17 11:10:49 -06001145{
1146 const VkLayerDispatchTable *disp;
1147
1148 disp = loader_get_dispatch(cmdBuffer);
1149
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001150 disp->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Tony Barbourde4124d2015-07-03 10:33:54 -06001151}
1152
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001153LOADER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Tony Barbourde4124d2015-07-03 10:33:54 -06001154{
1155 const VkLayerDispatchTable *disp;
1156
1157 disp = loader_get_dispatch(cmdBuffer);
1158
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001159 disp->CmdSetBlendConstants(cmdBuffer, blendConst);
Tony Barbourde4124d2015-07-03 10:33:54 -06001160}
1161
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001162LOADER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Tony Barbourde4124d2015-07-03 10:33:54 -06001163{
1164 const VkLayerDispatchTable *disp;
1165
1166 disp = loader_get_dispatch(cmdBuffer);
1167
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001168 disp->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop2605cb02015-08-18 15:21:16 -06001169}
1170
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001171LOADER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northrop2605cb02015-08-18 15:21:16 -06001172{
1173 const VkLayerDispatchTable *disp;
1174
1175 disp = loader_get_dispatch(cmdBuffer);
1176
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001177 disp->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
1178}
1179
1180LOADER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
1181{
1182 const VkLayerDispatchTable *disp;
1183
1184 disp = loader_get_dispatch(cmdBuffer);
1185
1186 disp->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
1187}
1188
1189LOADER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
1190{
1191 const VkLayerDispatchTable *disp;
1192
1193 disp = loader_get_dispatch(cmdBuffer);
1194
1195 disp->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001196}
1197
Mark Lobodzinskia65c4632015-06-15 13:21:21 -06001198LOADER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001199{
1200 const VkLayerDispatchTable *disp;
1201
1202 disp = loader_get_dispatch(cmdBuffer);
1203
Mark Lobodzinskia65c4632015-06-15 13:21:21 -06001204 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001205}
1206
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001207LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
1208{
1209 const VkLayerDispatchTable *disp;
1210
1211 disp = loader_get_dispatch(cmdBuffer);
1212
1213 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
1214}
1215
Jon Ashburn4e189562015-07-23 18:49:07 -06001216LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
1217{
1218 const VkLayerDispatchTable *disp;
1219
1220 disp = loader_get_dispatch(cmdBuffer);
1221
1222 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
1223}
1224
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06001225LOADER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001226{
1227 const VkLayerDispatchTable *disp;
1228
1229 disp = loader_get_dispatch(cmdBuffer);
1230
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06001231 disp->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001232}
1233
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06001234LOADER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001235{
1236 const VkLayerDispatchTable *disp;
1237
1238 disp = loader_get_dispatch(cmdBuffer);
1239
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06001240 disp->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001241}
1242
1243LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
1244{
1245 const VkLayerDispatchTable *disp;
1246
1247 disp = loader_get_dispatch(cmdBuffer);
1248
1249 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
1250}
1251
1252LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
1253{
1254 const VkLayerDispatchTable *disp;
1255
1256 disp = loader_get_dispatch(cmdBuffer);
1257
1258 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
1259}
1260
1261LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
1262{
1263 const VkLayerDispatchTable *disp;
1264
1265 disp = loader_get_dispatch(cmdBuffer);
1266
1267 disp->CmdDispatch(cmdBuffer, x, y, z);
1268}
1269
1270LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
1271{
1272 const VkLayerDispatchTable *disp;
1273
1274 disp = loader_get_dispatch(cmdBuffer);
1275
1276 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset);
1277}
1278
1279LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
1280{
1281 const VkLayerDispatchTable *disp;
1282
1283 disp = loader_get_dispatch(cmdBuffer);
1284
1285 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
1286}
1287
1288LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
1289{
1290 const VkLayerDispatchTable *disp;
1291
1292 disp = loader_get_dispatch(cmdBuffer);
1293
1294 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1295}
1296
Mark Lobodzinski20f68592015-05-22 14:43:25 -05001297LOADER_EXPORT void VKAPI vkCmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001298{
1299 const VkLayerDispatchTable *disp;
1300
1301 disp = loader_get_dispatch(cmdBuffer);
1302
Mark Lobodzinski20f68592015-05-22 14:43:25 -05001303 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001304}
1305
1306LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
1307{
1308 const VkLayerDispatchTable *disp;
1309
1310 disp = loader_get_dispatch(cmdBuffer);
1311
1312 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
1313}
1314
1315LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
1316{
1317 const VkLayerDispatchTable *disp;
1318
1319 disp = loader_get_dispatch(cmdBuffer);
1320
1321 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
1322}
1323
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001324LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
1325{
1326 const VkLayerDispatchTable *disp;
1327
1328 disp = loader_get_dispatch(cmdBuffer);
1329
1330 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
1331}
1332
1333LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
1334{
1335 const VkLayerDispatchTable *disp;
1336
1337 disp = loader_get_dispatch(cmdBuffer);
1338
1339 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
1340}
1341
Chris Forbese3105972015-06-24 14:34:53 +12001342LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001343{
1344 const VkLayerDispatchTable *disp;
1345
1346 disp = loader_get_dispatch(cmdBuffer);
1347
1348 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
1349}
1350
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06001351LOADER_EXPORT void VKAPI vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001352{
1353 const VkLayerDispatchTable *disp;
1354
1355 disp = loader_get_dispatch(cmdBuffer);
1356
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06001357 disp->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Chris Forbes2951d7d2015-06-22 17:21:59 +12001358}
1359
Chris Forbese3105972015-06-24 14:34:53 +12001360LOADER_EXPORT void VKAPI vkCmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects)
Chris Forbes2951d7d2015-06-22 17:21:59 +12001361{
1362 const VkLayerDispatchTable *disp;
1363
1364 disp = loader_get_dispatch(cmdBuffer);
1365
1366 disp->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
1367}
1368
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06001369LOADER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags imageAspectMask, VkImageLayout imageLayout, const VkClearDepthStencilValue *pDepthStencil, uint32_t rectCount, const VkRect3D* pRects)
Chris Forbes2951d7d2015-06-22 17:21:59 +12001370{
1371 const VkLayerDispatchTable *disp;
1372
1373 disp = loader_get_dispatch(cmdBuffer);
1374
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06001375 disp->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, pDepthStencil, rectCount, pRects);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001376}
1377
1378LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
1379{
1380 const VkLayerDispatchTable *disp;
1381
1382 disp = loader_get_dispatch(cmdBuffer);
1383
1384 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1385}
1386
Tony Barbourc2e987e2015-06-29 16:20:35 -06001387LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001388{
1389 const VkLayerDispatchTable *disp;
1390
1391 disp = loader_get_dispatch(cmdBuffer);
1392
Tony Barbourc2e987e2015-06-29 16:20:35 -06001393 disp->CmdSetEvent(cmdBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001394}
1395
Tony Barbourc2e987e2015-06-29 16:20:35 -06001396LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001397{
1398 const VkLayerDispatchTable *disp;
1399
1400 disp = loader_get_dispatch(cmdBuffer);
1401
Tony Barbourc2e987e2015-06-29 16:20:35 -06001402 disp->CmdResetEvent(cmdBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001403}
1404
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06001405LOADER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags sourceStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001406{
1407 const VkLayerDispatchTable *disp;
1408
1409 disp = loader_get_dispatch(cmdBuffer);
1410
Tony Barbourc2e987e2015-06-29 16:20:35 -06001411 disp->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001412}
1413
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06001414LOADER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkBool32 byRegion, uint32_t memBarrierCount, const void* const* ppMemBarriers)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001415{
1416 const VkLayerDispatchTable *disp;
1417
1418 disp = loader_get_dispatch(cmdBuffer);
1419
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06001420 disp->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001421}
1422
1423LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
1424{
1425 const VkLayerDispatchTable *disp;
1426
1427 disp = loader_get_dispatch(cmdBuffer);
1428
1429 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1430}
1431
1432LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
1433{
1434 const VkLayerDispatchTable *disp;
1435
1436 disp = loader_get_dispatch(cmdBuffer);
1437
1438 disp->CmdEndQuery(cmdBuffer, queryPool, slot);
1439}
1440
1441LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
1442{
1443 const VkLayerDispatchTable *disp;
1444
1445 disp = loader_get_dispatch(cmdBuffer);
1446
1447 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1448}
1449
1450LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset)
1451{
1452 const VkLayerDispatchTable *disp;
1453
1454 disp = loader_get_dispatch(cmdBuffer);
1455
1456 disp->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1457}
1458
1459LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkFlags flags)
1460{
1461 const VkLayerDispatchTable *disp;
1462
1463 disp = loader_get_dispatch(cmdBuffer);
1464
1465 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
1466}
1467
Jon Ashburn4e189562015-07-23 18:49:07 -06001468LOADER_EXPORT void VKAPI vkCmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001469{
1470 const VkLayerDispatchTable *disp;
1471
Jon Ashburn4e189562015-07-23 18:49:07 -06001472 disp = loader_get_dispatch(cmdBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001473
Courtney Goeltzenleuchtera375b622015-07-27 14:04:01 -06001474 disp->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Tony Barbourde4124d2015-07-03 10:33:54 -06001475}
1476
Chia-I Wuc278df82015-07-07 11:50:03 +08001477LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001478{
1479 const VkLayerDispatchTable *disp;
1480
1481 disp = loader_get_dispatch(cmdBuffer);
1482
Chia-I Wuc278df82015-07-07 11:50:03 +08001483 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
1484}
1485
1486LOADER_EXPORT void VKAPI vkCmdNextSubpass(VkCmdBuffer cmdBuffer, VkRenderPassContents contents)
1487{
1488 const VkLayerDispatchTable *disp;
1489
1490 disp = loader_get_dispatch(cmdBuffer);
1491
1492 disp->CmdNextSubpass(cmdBuffer, contents);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001493}
1494
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001495LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001496{
1497 const VkLayerDispatchTable *disp;
1498
1499 disp = loader_get_dispatch(cmdBuffer);
1500
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001501 disp->CmdEndRenderPass(cmdBuffer);
1502}
1503
1504LOADER_EXPORT void VKAPI vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers)
1505{
1506 const VkLayerDispatchTable *disp;
1507
1508 disp = loader_get_dispatch(cmdBuffer);
1509
1510 disp->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001511}