blob: a2f5d1a5d692378d9a93f066e3078e83c302c7bc [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
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600217LOADER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jon Ashburn4e189562015-07-23 18:49:07 -0600218 VkPhysicalDevice gpu,
219 VkPhysicalDeviceFeatures *pFeatures)
220{
221 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn4e189562015-07-23 18:49:07 -0600222
223 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600224 disp->GetPhysicalDeviceFeatures(gpu, pFeatures);
Jon Ashburn4e189562015-07-23 18:49:07 -0600225}
226
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600227LOADER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jon Ashburn4e189562015-07-23 18:49:07 -0600228 VkPhysicalDevice gpu,
229 VkFormat format,
230 VkFormatProperties *pFormatInfo)
231{
232 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn4e189562015-07-23 18:49:07 -0600233
234 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600235 disp->GetPhysicalDeviceFormatProperties(gpu, format, pFormatInfo);
Jon Ashburn4e189562015-07-23 18:49:07 -0600236}
237
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600238LOADER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties)
Jon Ashburn4e189562015-07-23 18:49:07 -0600239{
240 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn4e189562015-07-23 18:49:07 -0600241
242 disp = loader_get_instance_dispatch(physicalDevice);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600243 disp->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jon Ashburn4e189562015-07-23 18:49:07 -0600244}
245
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600246LOADER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jon Ashburnfce93d92015-05-12 17:26:48 -0600247 VkPhysicalDevice gpu,
Tony Barbour426b9052015-06-24 16:06:58 -0600248 VkPhysicalDeviceProperties* pProperties)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600249{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600250 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600251
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600252 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600253 disp->GetPhysicalDeviceProperties(gpu, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600254}
255
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600256LOADER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Tony Barbour426b9052015-06-24 16:06:58 -0600257 VkPhysicalDevice gpu,
Cody Northropef72e2a2015-08-03 17:04:53 -0600258 uint32_t* pCount,
259 VkQueueFamilyProperties* pQueueProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600260{
261 const VkLayerInstanceDispatchTable *disp;
Tony Barbour426b9052015-06-24 16:06:58 -0600262
263 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600264 disp->GetPhysicalDeviceQueueFamilyProperties(gpu, pCount, pQueueProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600265}
266
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600267LOADER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Tony Barbour426b9052015-06-24 16:06:58 -0600268 VkPhysicalDevice gpu,
269 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
270{
271 const VkLayerInstanceDispatchTable *disp;
Tony Barbour426b9052015-06-24 16:06:58 -0600272
273 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600274 disp->GetPhysicalDeviceMemoryProperties(gpu, pMemoryProperties);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600275}
276
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600277LOADER_EXPORT VkResult VKAPI vkCreateDevice(
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600278 VkPhysicalDevice gpu,
279 const VkDeviceCreateInfo* pCreateInfo,
280 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600281{
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600282 VkResult res;
283
Jon Ashburnb40f2562015-05-29 13:15:39 -0600284 loader_platform_thread_lock_mutex(&loader_lock);
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600285
286 res = loader_CreateDevice(gpu, pCreateInfo, pDevice);
287
Jon Ashburnb40f2562015-05-29 13:15:39 -0600288 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600289 return res;
290}
291
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600292LOADER_EXPORT void VKAPI vkDestroyDevice(VkDevice device)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600293{
294 const VkLayerDispatchTable *disp;
Jon Ashburne58f1a32015-08-28 13:38:21 -0600295 struct loader_device *dev;
296 struct loader_icd *icd = loader_get_icd_and_device(device, &dev);
297 const struct loader_instance *inst = icd->this_instance;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600298 disp = loader_get_dispatch(device);
299
Jon Ashburnb40f2562015-05-29 13:15:39 -0600300 loader_platform_thread_lock_mutex(&loader_lock);
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600301 disp->DestroyDevice(device);
Jon Ashburne58f1a32015-08-28 13:38:21 -0600302 loader_remove_logical_device(inst, device);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600303 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600304}
305
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600306LOADER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600307 VkPhysicalDevice physicalDevice,
308 const char* pLayerName,
309 uint32_t* pCount,
310 VkExtensionProperties* pProperties)
Jon Ashburnb40f2562015-05-29 13:15:39 -0600311{
312 VkResult res;
313
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600314 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburn0bf6a182015-07-16 17:19:31 -0600315 //TODO convert over to using instance chain dispatch
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600316 res = loader_EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties);
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600317 loader_platform_thread_unlock_mutex(&loader_lock);
Tony Barbour426b9052015-06-24 16:06:58 -0600318 return res;
319}
320
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600321LOADER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600322 VkPhysicalDevice physicalDevice,
323 uint32_t* pCount,
324 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600325{
326 VkResult res;
327
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600328 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburn0bf6a182015-07-16 17:19:31 -0600329 //TODO convert over to using instance chain dispatch
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600330 res = loader_EnumerateDeviceLayerProperties(physicalDevice, pCount, pProperties);
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600331 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600332 return res;
333}
334
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600335LOADER_EXPORT void VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600336{
337 const VkLayerDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600338
339 disp = loader_get_dispatch(device);
340
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600341 disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
342 loader_set_dispatch(*pQueue, disp);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600343}
344
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -0600345LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600346{
347 const VkLayerDispatchTable *disp;
348
349 disp = loader_get_dispatch(queue);
350
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -0600351 return disp->QueueSubmit(queue, submitCount, pSubmitInfo, fence);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600352}
353
354LOADER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
355{
356 const VkLayerDispatchTable *disp;
357
358 disp = loader_get_dispatch(queue);
359
360 return disp->QueueWaitIdle(queue);
361}
362
363LOADER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
364{
365 const VkLayerDispatchTable *disp;
366
367 disp = loader_get_dispatch(device);
368
369 return disp->DeviceWaitIdle(device);
370}
371
372LOADER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem)
373{
374 const VkLayerDispatchTable *disp;
375
376 disp = loader_get_dispatch(device);
377
378 return disp->AllocMemory(device, pAllocInfo, pMem);
379}
380
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600381LOADER_EXPORT void VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600382{
383 const VkLayerDispatchTable *disp;
384
385 disp = loader_get_dispatch(device);
386
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600387 disp->FreeMemory(device, mem);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600388}
389
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600390LOADER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
391{
392 const VkLayerDispatchTable *disp;
393
394 disp = loader_get_dispatch(device);
395
396 return disp->MapMemory(device, mem, offset, size, flags, ppData);
397}
398
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600399LOADER_EXPORT void VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600400{
401 const VkLayerDispatchTable *disp;
402
403 disp = loader_get_dispatch(device);
404
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600405 disp->UnmapMemory(device, mem);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600406}
407
408LOADER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
409{
410 const VkLayerDispatchTable *disp;
411
412 disp = loader_get_dispatch(device);
413
414 return disp->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
415}
416
417LOADER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
418{
419 const VkLayerDispatchTable *disp;
420
421 disp = loader_get_dispatch(device);
422
423 return disp->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
424}
425
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600426LOADER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -0600427{
428 const VkLayerDispatchTable *disp;
429
430 disp = loader_get_dispatch(device);
431
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600432 disp->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -0600433}
434
Tony Barbourde4124d2015-07-03 10:33:54 -0600435LOADER_EXPORT VkResult VKAPI vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600436{
437 const VkLayerDispatchTable *disp;
438
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500439 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600440
Tony Barbourde4124d2015-07-03 10:33:54 -0600441 return disp->BindBufferMemory(device, buffer, mem, offset);
442}
443
444LOADER_EXPORT VkResult VKAPI vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize offset)
445{
446 const VkLayerDispatchTable *disp;
447
448 disp = loader_get_dispatch(device);
449
450 return disp->BindImageMemory(device, image, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600451}
452
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600453LOADER_EXPORT void VKAPI vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn4e189562015-07-23 18:49:07 -0600454{
455 const VkLayerDispatchTable *disp;
456
457 disp = loader_get_dispatch(device);
458
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600459 disp->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jon Ashburn4e189562015-07-23 18:49:07 -0600460}
461
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600462LOADER_EXPORT void VKAPI vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn4e189562015-07-23 18:49:07 -0600463{
464 const VkLayerDispatchTable *disp;
465
466 disp = loader_get_dispatch(device);
467
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600468 disp->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jon Ashburn4e189562015-07-23 18:49:07 -0600469}
470
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600471LOADER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600472{
473 const VkLayerDispatchTable *disp;
474
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600475 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600476
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600477 disp->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600478}
479
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600480LOADER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties)
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600481{
482 const VkLayerInstanceDispatchTable *disp;
483
484 disp = loader_get_instance_dispatch(physicalDevice);
485
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600486 disp->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600487}
488
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600489LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo)
490{
491 const VkLayerDispatchTable *disp;
492
493 disp = loader_get_dispatch(queue);
494
495 return disp->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
496}
497
Jon Ashburn4e189562015-07-23 18:49:07 -0600498LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo)
499{
500 const VkLayerDispatchTable *disp;
501
502 disp = loader_get_dispatch(queue);
503
504 return disp->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
505}
506
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600507LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo)
508{
509 const VkLayerDispatchTable *disp;
510
511 disp = loader_get_dispatch(queue);
512
513 return disp->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600514}
515
516LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
517{
518 const VkLayerDispatchTable *disp;
519
520 disp = loader_get_dispatch(device);
521
522 return disp->CreateFence(device, pCreateInfo, pFence);
523}
524
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600525LOADER_EXPORT void VKAPI vkDestroyFence(VkDevice device, VkFence fence)
Tony Barbourde4124d2015-07-03 10:33:54 -0600526{
527 const VkLayerDispatchTable *disp;
528
529 disp = loader_get_dispatch(device);
530
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600531 disp->DestroyFence(device, fence);
Tony Barbourde4124d2015-07-03 10:33:54 -0600532}
533
Courtney Goeltzenleuchterf2e33ad2015-06-18 17:28:20 -0600534LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600535{
536 const VkLayerDispatchTable *disp;
537
538 disp = loader_get_dispatch(device);
539
540 return disp->ResetFences(device, fenceCount, pFences);
541}
542
543LOADER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
544{
545 const VkLayerDispatchTable *disp;
546
547 disp = loader_get_dispatch(device);
548
549 return disp->GetFenceStatus(device, fence);
550}
551
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -0600552LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600553{
554 const VkLayerDispatchTable *disp;
555
556 disp = loader_get_dispatch(device);
557
558 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
559}
560
561LOADER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
562{
563 const VkLayerDispatchTable *disp;
564
565 disp = loader_get_dispatch(device);
566
567 return disp->CreateSemaphore(device, pCreateInfo, pSemaphore);
568}
569
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600570LOADER_EXPORT void VKAPI vkDestroySemaphore(VkDevice device, VkSemaphore semaphore)
Tony Barbourde4124d2015-07-03 10:33:54 -0600571{
572 const VkLayerDispatchTable *disp;
573
574 disp = loader_get_dispatch(device);
575
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600576 disp->DestroySemaphore(device, semaphore);
Tony Barbourde4124d2015-07-03 10:33:54 -0600577}
578
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600579LOADER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
580{
581 const VkLayerDispatchTable *disp;
582
583 disp = loader_get_dispatch(queue);
584
585 return disp->QueueSignalSemaphore(queue, semaphore);
586}
587
588LOADER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
589{
590 const VkLayerDispatchTable *disp;
591
592 disp = loader_get_dispatch(queue);
593
594 return disp->QueueWaitSemaphore(queue, semaphore);
595}
596
597LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
598{
599 const VkLayerDispatchTable *disp;
600
601 disp = loader_get_dispatch(device);
602
603 return disp->CreateEvent(device, pCreateInfo, pEvent);
604}
605
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600606LOADER_EXPORT void VKAPI vkDestroyEvent(VkDevice device, VkEvent event)
Tony Barbourde4124d2015-07-03 10:33:54 -0600607{
608 const VkLayerDispatchTable *disp;
609
610 disp = loader_get_dispatch(device);
611
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600612 disp->DestroyEvent(device, event);
Tony Barbourde4124d2015-07-03 10:33:54 -0600613}
614
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600615LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
616{
617 const VkLayerDispatchTable *disp;
618
619 disp = loader_get_dispatch(device);
620
621 return disp->GetEventStatus(device, event);
622}
623
624LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
625{
626 const VkLayerDispatchTable *disp;
627
628 disp = loader_get_dispatch(device);
629
630 return disp->SetEvent(device, event);
631}
632
633LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
634{
635 const VkLayerDispatchTable *disp;
636
637 disp = loader_get_dispatch(device);
638
639 return disp->ResetEvent(device, event);
640}
641
642LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
643{
644 const VkLayerDispatchTable *disp;
645
646 disp = loader_get_dispatch(device);
647
648 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool);
649}
650
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600651LOADER_EXPORT void VKAPI vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool)
Tony Barbourde4124d2015-07-03 10:33:54 -0600652{
653 const VkLayerDispatchTable *disp;
654
655 disp = loader_get_dispatch(device);
656
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600657 disp->DestroyQueryPool(device, queryPool);
Tony Barbourde4124d2015-07-03 10:33:54 -0600658}
659
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600660LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
661{
662 const VkLayerDispatchTable *disp;
663
664 disp = loader_get_dispatch(device);
665
666 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
667}
668
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600669LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
670{
671 const VkLayerDispatchTable *disp;
672
673 disp = loader_get_dispatch(device);
674
675 return disp->CreateBuffer(device, pCreateInfo, pBuffer);
676}
677
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600678LOADER_EXPORT void VKAPI vkDestroyBuffer(VkDevice device, VkBuffer buffer)
Tony Barbourde4124d2015-07-03 10:33:54 -0600679{
680 const VkLayerDispatchTable *disp;
681
682 disp = loader_get_dispatch(device);
683
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600684 disp->DestroyBuffer(device, buffer);
Tony Barbourde4124d2015-07-03 10:33:54 -0600685}
686
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600687LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
688{
689 const VkLayerDispatchTable *disp;
690
691 disp = loader_get_dispatch(device);
692
693 return disp->CreateBufferView(device, pCreateInfo, pView);
694}
695
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600696LOADER_EXPORT void VKAPI vkDestroyBufferView(VkDevice device, VkBufferView bufferView)
Tony Barbourde4124d2015-07-03 10:33:54 -0600697{
698 const VkLayerDispatchTable *disp;
699
700 disp = loader_get_dispatch(device);
701
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600702 disp->DestroyBufferView(device, bufferView);
Tony Barbourde4124d2015-07-03 10:33:54 -0600703}
704
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600705LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
706{
707 const VkLayerDispatchTable *disp;
708
709 disp = loader_get_dispatch(device);
710
711 return disp->CreateImage(device, pCreateInfo, pImage);
712}
713
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600714LOADER_EXPORT void VKAPI vkDestroyImage(VkDevice device, VkImage image)
Tony Barbourde4124d2015-07-03 10:33:54 -0600715{
716 const VkLayerDispatchTable *disp;
717
718 disp = loader_get_dispatch(device);
719
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600720 disp->DestroyImage(device, image);
Tony Barbourde4124d2015-07-03 10:33:54 -0600721}
722
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600723LOADER_EXPORT void VKAPI vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600724{
725 const VkLayerDispatchTable *disp;
726
727 disp = loader_get_dispatch(device);
728
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600729 disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600730}
731
732LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
733{
734 const VkLayerDispatchTable *disp;
735
736 disp = loader_get_dispatch(device);
737
738 return disp->CreateImageView(device, pCreateInfo, pView);
739}
740
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600741LOADER_EXPORT void VKAPI vkDestroyImageView(VkDevice device, VkImageView imageView)
Tony Barbourde4124d2015-07-03 10:33:54 -0600742{
743 const VkLayerDispatchTable *disp;
744
745 disp = loader_get_dispatch(device);
746
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600747 disp->DestroyImageView(device, imageView);
Tony Barbourde4124d2015-07-03 10:33:54 -0600748}
749
Courtney Goeltzenleuchter0b29b0d2015-06-24 18:24:19 -0600750LOADER_EXPORT VkResult VKAPI vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShader)
751{
752 const VkLayerDispatchTable *disp;
753
754 disp = loader_get_dispatch(device);
755
756 return disp->CreateShaderModule(device, pCreateInfo, pShader);
757}
758
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600759LOADER_EXPORT void VKAPI vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule)
Tony Barbourde4124d2015-07-03 10:33:54 -0600760{
761 const VkLayerDispatchTable *disp;
762
763 disp = loader_get_dispatch(device);
764
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600765 disp->DestroyShaderModule(device, shaderModule);
Tony Barbourde4124d2015-07-03 10:33:54 -0600766}
767
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600768LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
769{
770 const VkLayerDispatchTable *disp;
771
772 disp = loader_get_dispatch(device);
773
774 return disp->CreateShader(device, pCreateInfo, pShader);
775}
776
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600777LOADER_EXPORT void VKAPI vkDestroyShader(VkDevice device, VkShader shader)
Tony Barbourde4124d2015-07-03 10:33:54 -0600778{
779 const VkLayerDispatchTable *disp;
780
781 disp = loader_get_dispatch(device);
782
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600783 disp->DestroyShader(device, shader);
Tony Barbourde4124d2015-07-03 10:33:54 -0600784}
785
Jon Ashburn0d60d272015-07-09 15:02:25 -0600786LOADER_EXPORT VkResult VKAPI vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600787{
788 const VkLayerDispatchTable *disp;
789
790 disp = loader_get_dispatch(device);
791
Jon Ashburn0d60d272015-07-09 15:02:25 -0600792 return disp->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600793}
794
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600795LOADER_EXPORT void VKAPI vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600796{
797 const VkLayerDispatchTable *disp;
798
799 disp = loader_get_dispatch(device);
800
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600801 disp->DestroyPipelineCache(device, pipelineCache);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600802}
803
Jon Ashburn0d60d272015-07-09 15:02:25 -0600804LOADER_EXPORT size_t VKAPI vkGetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600805{
806 const VkLayerDispatchTable *disp;
807
808 disp = loader_get_dispatch(device);
809
Jon Ashburn0d60d272015-07-09 15:02:25 -0600810 return disp->GetPipelineCacheSize(device, pipelineCache);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600811}
812
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -0600813LOADER_EXPORT VkResult VKAPI vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t dataSize, void* pData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600814{
815 const VkLayerDispatchTable *disp;
816
817 disp = loader_get_dispatch(device);
818
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -0600819 return disp->GetPipelineCacheData(device, pipelineCache, dataSize, pData);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600820}
821
Jon Ashburn0d60d272015-07-09 15:02:25 -0600822LOADER_EXPORT VkResult VKAPI vkMergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600823{
824 const VkLayerDispatchTable *disp;
825
826 disp = loader_get_dispatch(device);
827
Jon Ashburn0d60d272015-07-09 15:02:25 -0600828 return disp->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600829}
830
Jon Ashburn0d60d272015-07-09 15:02:25 -0600831LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600832{
833 const VkLayerDispatchTable *disp;
834
835 disp = loader_get_dispatch(device);
836
Jon Ashburn0d60d272015-07-09 15:02:25 -0600837 return disp->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
838}
839
840LOADER_EXPORT VkResult VKAPI vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines)
841{
842 const VkLayerDispatchTable *disp;
843
844 disp = loader_get_dispatch(device);
845
846 return disp->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600847}
848
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600849LOADER_EXPORT void VKAPI vkDestroyPipeline(VkDevice device, VkPipeline pipeline)
Tony Barbourde4124d2015-07-03 10:33:54 -0600850{
851 const VkLayerDispatchTable *disp;
852
853 disp = loader_get_dispatch(device);
854
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600855 disp->DestroyPipeline(device, pipeline);
Tony Barbourde4124d2015-07-03 10:33:54 -0600856}
857
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600858LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
859{
860 const VkLayerDispatchTable *disp;
861
862 disp = loader_get_dispatch(device);
863
864 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
865}
866
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600867LOADER_EXPORT void VKAPI vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout)
Tony Barbourde4124d2015-07-03 10:33:54 -0600868{
869 const VkLayerDispatchTable *disp;
870
871 disp = loader_get_dispatch(device);
872
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600873 disp->DestroyPipelineLayout(device, pipelineLayout);
Tony Barbourde4124d2015-07-03 10:33:54 -0600874}
875
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600876LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
877{
878 const VkLayerDispatchTable *disp;
879
880 disp = loader_get_dispatch(device);
881
882 return disp->CreateSampler(device, pCreateInfo, pSampler);
883}
884
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600885LOADER_EXPORT void VKAPI vkDestroySampler(VkDevice device, VkSampler sampler)
Tony Barbourde4124d2015-07-03 10:33:54 -0600886{
887 const VkLayerDispatchTable *disp;
888
889 disp = loader_get_dispatch(device);
890
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600891 disp->DestroySampler(device, sampler);
Tony Barbourde4124d2015-07-03 10:33:54 -0600892}
893
894
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600895LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
896{
897 const VkLayerDispatchTable *disp;
898
899 disp = loader_get_dispatch(device);
900
901 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
902}
903
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600904LOADER_EXPORT void VKAPI vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout)
Tony Barbourde4124d2015-07-03 10:33:54 -0600905{
906 const VkLayerDispatchTable *disp;
907
908 disp = loader_get_dispatch(device);
909
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600910 disp->DestroyDescriptorSetLayout(device, descriptorSetLayout);
Tony Barbourde4124d2015-07-03 10:33:54 -0600911}
912
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -0600913LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600914{
915 const VkLayerDispatchTable *disp;
916
917 disp = loader_get_dispatch(device);
918
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -0600919 return disp->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600920}
921
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600922LOADER_EXPORT void VKAPI vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
Tony Barbourde4124d2015-07-03 10:33:54 -0600923{
924 const VkLayerDispatchTable *disp;
925
926 disp = loader_get_dispatch(device);
927
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600928 disp->DestroyDescriptorPool(device, descriptorPool);
Tony Barbourde4124d2015-07-03 10:33:54 -0600929}
930
931
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600932LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
933{
934 const VkLayerDispatchTable *disp;
935
936 disp = loader_get_dispatch(device);
937
938 return disp->ResetDescriptorPool(device, descriptorPool);
939}
940
Cody Northropc8aa4a52015-08-03 12:47:29 -0600941LOADER_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 -0600942{
943 const VkLayerDispatchTable *disp;
944
945 disp = loader_get_dispatch(device);
946
Cody Northropc8aa4a52015-08-03 12:47:29 -0600947 return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600948}
949
Tony Barbourb857d312015-07-10 10:50:45 -0600950LOADER_EXPORT VkResult VKAPI vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
951{
952 const VkLayerDispatchTable *disp;
953
954 disp = loader_get_dispatch(device);
955
956 return disp->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
957}
958
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600959LOADER_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 -0600960{
961 const VkLayerDispatchTable *disp;
962
963 disp = loader_get_dispatch(device);
964
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600965 disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600966}
967
Jon Ashburn4e189562015-07-23 18:49:07 -0600968LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
969{
970 const VkLayerDispatchTable *disp;
971
972 disp = loader_get_dispatch(device);
973
974 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
975}
976
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600977LOADER_EXPORT void VKAPI vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer)
Jon Ashburn4e189562015-07-23 18:49:07 -0600978{
979 const VkLayerDispatchTable *disp;
980
981 disp = loader_get_dispatch(device);
982
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600983 disp->DestroyFramebuffer(device, framebuffer);
Jon Ashburn4e189562015-07-23 18:49:07 -0600984}
985
986LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
987{
988 const VkLayerDispatchTable *disp;
989
990 disp = loader_get_dispatch(device);
991
992 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass);
993}
994
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600995LOADER_EXPORT void VKAPI vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass)
Jon Ashburn4e189562015-07-23 18:49:07 -0600996{
997 const VkLayerDispatchTable *disp;
998
999 disp = loader_get_dispatch(device);
1000
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001001 disp->DestroyRenderPass(device, renderPass);
Jon Ashburn4e189562015-07-23 18:49:07 -06001002}
1003
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001004LOADER_EXPORT void VKAPI vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity)
Jon Ashburn4e189562015-07-23 18:49:07 -06001005{
1006 const VkLayerDispatchTable *disp;
1007
1008 disp = loader_get_dispatch(device);
1009
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001010 disp->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jon Ashburn4e189562015-07-23 18:49:07 -06001011}
1012
Cody Northropf02f9f82015-07-09 18:08:05 -06001013LOADER_EXPORT VkResult VKAPI vkCreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool)
1014{
1015 const VkLayerDispatchTable *disp;
1016
1017 disp = loader_get_dispatch(device);
1018
1019 return disp->CreateCommandPool(device, pCreateInfo, pCmdPool);
1020}
1021
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001022LOADER_EXPORT void VKAPI vkDestroyCommandPool(VkDevice device, VkCmdPool cmdPool)
Cody Northropf02f9f82015-07-09 18:08:05 -06001023{
1024 const VkLayerDispatchTable *disp;
1025
1026 disp = loader_get_dispatch(device);
1027
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001028 disp->DestroyCommandPool(device, cmdPool);
Cody Northropf02f9f82015-07-09 18:08:05 -06001029}
1030
1031LOADER_EXPORT VkResult VKAPI vkResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags)
1032{
1033 const VkLayerDispatchTable *disp;
1034
1035 disp = loader_get_dispatch(device);
1036
1037 return disp->ResetCommandPool(device, cmdPool, flags);
1038}
1039
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001040LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
1041{
1042 const VkLayerDispatchTable *disp;
1043 VkResult res;
1044
1045 disp = loader_get_dispatch(device);
1046
1047 res = disp->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
1048 if (res == VK_SUCCESS) {
1049 loader_init_dispatch(*pCmdBuffer, disp);
1050 }
1051
1052 return res;
1053}
1054
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001055LOADER_EXPORT void VKAPI vkDestroyCommandBuffer(VkDevice device, VkCmdBuffer cmdBuffer)
Tony Barbourde4124d2015-07-03 10:33:54 -06001056{
1057 const VkLayerDispatchTable *disp;
1058
1059 disp = loader_get_dispatch(device);
1060
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001061 disp->DestroyCommandBuffer(device, cmdBuffer);
Tony Barbourde4124d2015-07-03 10:33:54 -06001062}
1063
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001064LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
1065{
1066 const VkLayerDispatchTable *disp;
1067
1068 disp = loader_get_dispatch(cmdBuffer);
1069
1070 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo);
1071}
1072
1073LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
1074{
1075 const VkLayerDispatchTable *disp;
1076
1077 disp = loader_get_dispatch(cmdBuffer);
1078
1079 return disp->EndCommandBuffer(cmdBuffer);
1080}
1081
Cody Northropf02f9f82015-07-09 18:08:05 -06001082LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001083{
1084 const VkLayerDispatchTable *disp;
1085
1086 disp = loader_get_dispatch(cmdBuffer);
1087
Cody Northropf02f9f82015-07-09 18:08:05 -06001088 return disp->ResetCommandBuffer(cmdBuffer, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001089}
1090
1091LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
1092{
1093 const VkLayerDispatchTable *disp;
1094
1095 disp = loader_get_dispatch(cmdBuffer);
1096
1097 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
1098}
1099
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06001100LOADER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001101{
1102 const VkLayerDispatchTable *disp;
1103
1104 disp = loader_get_dispatch(cmdBuffer);
1105
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06001106 disp->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
1107}
1108
1109LOADER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
1110{
1111 const VkLayerDispatchTable *disp;
1112
1113 disp = loader_get_dispatch(cmdBuffer);
1114
1115 disp->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Tony Barbourde4124d2015-07-03 10:33:54 -06001116}
1117
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001118LOADER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Tony Barbourde4124d2015-07-03 10:33:54 -06001119{
1120 const VkLayerDispatchTable *disp;
1121
1122 disp = loader_get_dispatch(cmdBuffer);
1123
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001124 disp->CmdSetLineWidth(cmdBuffer, lineWidth);
Cody Northropf5bd2252015-08-17 11:10:49 -06001125}
1126
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001127LOADER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Cody Northropf5bd2252015-08-17 11:10:49 -06001128{
1129 const VkLayerDispatchTable *disp;
1130
1131 disp = loader_get_dispatch(cmdBuffer);
1132
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001133 disp->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Tony Barbourde4124d2015-07-03 10:33:54 -06001134}
1135
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001136LOADER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Tony Barbourde4124d2015-07-03 10:33:54 -06001137{
1138 const VkLayerDispatchTable *disp;
1139
1140 disp = loader_get_dispatch(cmdBuffer);
1141
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001142 disp->CmdSetBlendConstants(cmdBuffer, blendConst);
Tony Barbourde4124d2015-07-03 10:33:54 -06001143}
1144
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001145LOADER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Tony Barbourde4124d2015-07-03 10:33:54 -06001146{
1147 const VkLayerDispatchTable *disp;
1148
1149 disp = loader_get_dispatch(cmdBuffer);
1150
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001151 disp->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop2605cb02015-08-18 15:21:16 -06001152}
1153
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001154LOADER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northrop2605cb02015-08-18 15:21:16 -06001155{
1156 const VkLayerDispatchTable *disp;
1157
1158 disp = loader_get_dispatch(cmdBuffer);
1159
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001160 disp->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
1161}
1162
1163LOADER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
1164{
1165 const VkLayerDispatchTable *disp;
1166
1167 disp = loader_get_dispatch(cmdBuffer);
1168
1169 disp->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
1170}
1171
1172LOADER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
1173{
1174 const VkLayerDispatchTable *disp;
1175
1176 disp = loader_get_dispatch(cmdBuffer);
1177
1178 disp->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001179}
1180
Mark Lobodzinskia65c4632015-06-15 13:21:21 -06001181LOADER_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 -06001182{
1183 const VkLayerDispatchTable *disp;
1184
1185 disp = loader_get_dispatch(cmdBuffer);
1186
Mark Lobodzinskia65c4632015-06-15 13:21:21 -06001187 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001188}
1189
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001190LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
1191{
1192 const VkLayerDispatchTable *disp;
1193
1194 disp = loader_get_dispatch(cmdBuffer);
1195
1196 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
1197}
1198
Jon Ashburn4e189562015-07-23 18:49:07 -06001199LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
1200{
1201 const VkLayerDispatchTable *disp;
1202
1203 disp = loader_get_dispatch(cmdBuffer);
1204
1205 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
1206}
1207
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06001208LOADER_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 -06001209{
1210 const VkLayerDispatchTable *disp;
1211
1212 disp = loader_get_dispatch(cmdBuffer);
1213
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06001214 disp->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001215}
1216
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06001217LOADER_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 -06001218{
1219 const VkLayerDispatchTable *disp;
1220
1221 disp = loader_get_dispatch(cmdBuffer);
1222
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06001223 disp->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001224}
1225
1226LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
1227{
1228 const VkLayerDispatchTable *disp;
1229
1230 disp = loader_get_dispatch(cmdBuffer);
1231
1232 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
1233}
1234
1235LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
1236{
1237 const VkLayerDispatchTable *disp;
1238
1239 disp = loader_get_dispatch(cmdBuffer);
1240
1241 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
1242}
1243
1244LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
1245{
1246 const VkLayerDispatchTable *disp;
1247
1248 disp = loader_get_dispatch(cmdBuffer);
1249
1250 disp->CmdDispatch(cmdBuffer, x, y, z);
1251}
1252
1253LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
1254{
1255 const VkLayerDispatchTable *disp;
1256
1257 disp = loader_get_dispatch(cmdBuffer);
1258
1259 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset);
1260}
1261
1262LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
1263{
1264 const VkLayerDispatchTable *disp;
1265
1266 disp = loader_get_dispatch(cmdBuffer);
1267
1268 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
1269}
1270
1271LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
1272{
1273 const VkLayerDispatchTable *disp;
1274
1275 disp = loader_get_dispatch(cmdBuffer);
1276
1277 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1278}
1279
Mark Lobodzinski20f68592015-05-22 14:43:25 -05001280LOADER_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 -06001281{
1282 const VkLayerDispatchTable *disp;
1283
1284 disp = loader_get_dispatch(cmdBuffer);
1285
Mark Lobodzinski20f68592015-05-22 14:43:25 -05001286 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001287}
1288
1289LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
1290{
1291 const VkLayerDispatchTable *disp;
1292
1293 disp = loader_get_dispatch(cmdBuffer);
1294
1295 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
1296}
1297
1298LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
1299{
1300 const VkLayerDispatchTable *disp;
1301
1302 disp = loader_get_dispatch(cmdBuffer);
1303
1304 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
1305}
1306
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001307LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
1308{
1309 const VkLayerDispatchTable *disp;
1310
1311 disp = loader_get_dispatch(cmdBuffer);
1312
1313 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
1314}
1315
1316LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
1317{
1318 const VkLayerDispatchTable *disp;
1319
1320 disp = loader_get_dispatch(cmdBuffer);
1321
1322 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
1323}
1324
Chris Forbese3105972015-06-24 14:34:53 +12001325LOADER_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 -06001326{
1327 const VkLayerDispatchTable *disp;
1328
1329 disp = loader_get_dispatch(cmdBuffer);
1330
1331 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
1332}
1333
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06001334LOADER_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 -06001335{
1336 const VkLayerDispatchTable *disp;
1337
1338 disp = loader_get_dispatch(cmdBuffer);
1339
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06001340 disp->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Chris Forbes2951d7d2015-06-22 17:21:59 +12001341}
1342
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06001343LOADER_EXPORT void VKAPI vkCmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects)
Chris Forbes2951d7d2015-06-22 17:21:59 +12001344{
1345 const VkLayerDispatchTable *disp;
1346
1347 disp = loader_get_dispatch(cmdBuffer);
1348
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06001349 disp->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001350}
1351
1352LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
1353{
1354 const VkLayerDispatchTable *disp;
1355
1356 disp = loader_get_dispatch(cmdBuffer);
1357
1358 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1359}
1360
Tony Barbourc2e987e2015-06-29 16:20:35 -06001361LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001362{
1363 const VkLayerDispatchTable *disp;
1364
1365 disp = loader_get_dispatch(cmdBuffer);
1366
Tony Barbourc2e987e2015-06-29 16:20:35 -06001367 disp->CmdSetEvent(cmdBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001368}
1369
Tony Barbourc2e987e2015-06-29 16:20:35 -06001370LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001371{
1372 const VkLayerDispatchTable *disp;
1373
1374 disp = loader_get_dispatch(cmdBuffer);
1375
Tony Barbourc2e987e2015-06-29 16:20:35 -06001376 disp->CmdResetEvent(cmdBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001377}
1378
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06001379LOADER_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 -06001380{
1381 const VkLayerDispatchTable *disp;
1382
1383 disp = loader_get_dispatch(cmdBuffer);
1384
Tony Barbourc2e987e2015-06-29 16:20:35 -06001385 disp->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001386}
1387
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06001388LOADER_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 -06001389{
1390 const VkLayerDispatchTable *disp;
1391
1392 disp = loader_get_dispatch(cmdBuffer);
1393
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06001394 disp->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001395}
1396
1397LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
1398{
1399 const VkLayerDispatchTable *disp;
1400
1401 disp = loader_get_dispatch(cmdBuffer);
1402
1403 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1404}
1405
1406LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
1407{
1408 const VkLayerDispatchTable *disp;
1409
1410 disp = loader_get_dispatch(cmdBuffer);
1411
1412 disp->CmdEndQuery(cmdBuffer, queryPool, slot);
1413}
1414
1415LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
1416{
1417 const VkLayerDispatchTable *disp;
1418
1419 disp = loader_get_dispatch(cmdBuffer);
1420
1421 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1422}
1423
1424LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset)
1425{
1426 const VkLayerDispatchTable *disp;
1427
1428 disp = loader_get_dispatch(cmdBuffer);
1429
1430 disp->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1431}
1432
1433LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkFlags flags)
1434{
1435 const VkLayerDispatchTable *disp;
1436
1437 disp = loader_get_dispatch(cmdBuffer);
1438
1439 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
1440}
1441
Jon Ashburn4e189562015-07-23 18:49:07 -06001442LOADER_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 -06001443{
1444 const VkLayerDispatchTable *disp;
1445
Jon Ashburn4e189562015-07-23 18:49:07 -06001446 disp = loader_get_dispatch(cmdBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001447
Courtney Goeltzenleuchtera375b622015-07-27 14:04:01 -06001448 disp->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Tony Barbourde4124d2015-07-03 10:33:54 -06001449}
1450
Chia-I Wuc278df82015-07-07 11:50:03 +08001451LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001452{
1453 const VkLayerDispatchTable *disp;
1454
1455 disp = loader_get_dispatch(cmdBuffer);
1456
Chia-I Wuc278df82015-07-07 11:50:03 +08001457 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
1458}
1459
1460LOADER_EXPORT void VKAPI vkCmdNextSubpass(VkCmdBuffer cmdBuffer, VkRenderPassContents contents)
1461{
1462 const VkLayerDispatchTable *disp;
1463
1464 disp = loader_get_dispatch(cmdBuffer);
1465
1466 disp->CmdNextSubpass(cmdBuffer, contents);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001467}
1468
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001469LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001470{
1471 const VkLayerDispatchTable *disp;
1472
1473 disp = loader_get_dispatch(cmdBuffer);
1474
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001475 disp->CmdEndRenderPass(cmdBuffer);
1476}
1477
1478LOADER_EXPORT void VKAPI vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers)
1479{
1480 const VkLayerDispatchTable *disp;
1481
1482 disp = loader_get_dispatch(cmdBuffer);
1483
1484 disp->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001485}