blob: a73e922e13dd58ef1c6ce2375d5ed5978c4d50bc [file] [log] [blame]
Jon Ashburnd55a3942015-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 Goeltzenleuchter7f5aafc2015-07-05 11:28:29 -060024#define _GNU_SOURCE
Jon Ashburn27cd5842015-05-12 17:26:48 -060025#include <stdlib.h>
26#include <string.h>
Jon Ashburnd55a3942015-05-06 09:02:10 -060027
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060028#include "vk_loader_platform.h"
Jon Ashburnd55a3942015-05-06 09:02:10 -060029#include "loader.h"
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -060030#include "debug_report.h"
Ian Elliottd3ef02f2015-07-06 14:36:13 -060031#include "wsi_swapchain.h"
Jon Ashburnd55a3942015-05-06 09:02:10 -060032
Tobin Ehlisf37926f2015-05-13 11:57:18 -060033
Jon Ashburnd55a3942015-05-06 09:02:10 -060034/* Trampoline entrypoints */
Jon Ashburn27cd5842015-05-12 17:26:48 -060035LOADER_EXPORT VkResult VKAPI vkCreateInstance(
Courtney Goeltzenleuchter57fb1572015-06-08 15:13:50 -060036 const VkInstanceCreateInfo* pCreateInfo,
37 VkInstance* pInstance)
Jon Ashburn27cd5842015-05-12 17:26:48 -060038{
39 struct loader_instance *ptr_instance = NULL;
Jon Ashburn27cd5842015-05-12 17:26:48 -060040 VkResult res = VK_ERROR_INITIALIZATION_FAILED;
Jon Ashburn27cd5842015-05-12 17:26:48 -060041
Jon Ashburn8810c5f2015-08-18 18:04:47 -060042 loader_platform_thread_once(&once_init, loader_initialize);
Jon Ashburn27cd5842015-05-12 17:26:48 -060043
Courtney Goeltzenleuchter81095102015-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 Ashburn27cd5842015-05-12 17:26:48 -060055 if (ptr_instance == NULL) {
56 return VK_ERROR_OUT_OF_HOST_MEMORY;
57 }
Courtney Goeltzenleuchter81095102015-07-06 09:08:37 -060058
Jon Ashburn87d6aa92015-08-28 15:19:27 -060059 tls_instance = ptr_instance;
Courtney Goeltzenleuchter81095102015-07-06 09:08:37 -060060 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburnb82c1852015-08-11 14:49:54 -060061 memset(ptr_instance, 0, sizeof(struct loader_instance));
Jon Ashburn07daee72015-05-21 18:13:33 -060062
Courtney Goeltzenleuchter7f5aafc2015-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 Ashburn3d002332015-08-20 16:35:30 -060071 /* Due to implicit layers need to get layer list even if
Chia-I Wud50a7d72015-10-26 20:48:51 +080072 * enabledLayerNameCount == 0 and VK_INSTANCE_LAYERS is unset. For now always
Jon Ashburn3d002332015-08-20 16:35:30 -060073 * 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 Ashburne39a4f82015-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 Ashburn3d002332015-08-20 16:35:30 -060081
82 /* validate the app requested layers to be enabled */
Chia-I Wud50a7d72015-10-26 20:48:51 +080083 if (pCreateInfo->enabledLayerNameCount > 0) {
84 res = loader_validate_layers(pCreateInfo->enabledLayerNameCount,
Jon Ashburn3d002332015-08-20 16:35:30 -060085 pCreateInfo->ppEnabledLayerNames,
86 &ptr_instance->instance_layer_list);
87 if (res != VK_SUCCESS) {
Jon Ashburn1ff17592015-10-09 09:40:30 -060088 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn3d002332015-08-20 16:35:30 -060089 return res;
90 }
91 }
92
Jon Ashburn8810c5f2015-08-18 18:04:47 -060093 /* Scan/discover all ICD libraries */
94 memset(&ptr_instance->icd_libs, 0, sizeof(ptr_instance->icd_libs));
Jon Ashburne39a4f82015-08-28 13:38:21 -060095 loader_icd_scan(ptr_instance, &ptr_instance->icd_libs);
Jon Ashburn8810c5f2015-08-18 18:04:47 -060096
Jon Ashburneacfa3a2015-08-14 12:51:47 -060097 /* get extensions from all ICD's, merge so no duplicates, then validate */
Jon Ashburne39a4f82015-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 Ashburneacfa3a2015-08-14 12:51:47 -0600104 if (res != VK_SUCCESS) {
Jon Ashburne39a4f82015-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 Ashburneacfa3a2015-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 Goeltzenleuchter81095102015-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 Ashburne39a4f82015-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 Goeltzenleuchter81095102015-07-06 09:08:37 -0600129 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburneacfa3a2015-08-14 12:51:47 -0600130 loader_heap_free(ptr_instance, ptr_instance);
Courtney Goeltzenleuchter81095102015-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 Ashburnb82c1852015-08-11 14:49:54 -0600137 /* activate any layers on instance chain */
Jon Ashburne39a4f82015-08-28 13:38:21 -0600138 res = loader_enable_instance_layers(ptr_instance,
139 pCreateInfo,
140 &ptr_instance->instance_layer_list);
Courtney Goeltzenleuchter81095102015-07-06 09:08:37 -0600141 if (res != VK_SUCCESS) {
Jon Ashburne39a4f82015-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 Ashburneacfa3a2015-08-14 12:51:47 -0600150 loader.instances = ptr_instance->next;
151 loader_platform_thread_unlock_mutex(&loader_lock);
Courtney Goeltzenleuchter81095102015-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 Ashburnb82c1852015-08-11 14:49:54 -0600156 loader_activate_instance_layers(ptr_instance);
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600157
Ian Elliottd3ef02f2015-07-06 14:36:13 -0600158 wsi_swapchain_create_instance(ptr_instance, pCreateInfo);
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -0600159 debug_report_create_instance(ptr_instance, pCreateInfo);
Jon Ashburn07daee72015-05-21 18:13:33 -0600160
Jon Ashburn27cd5842015-05-12 17:26:48 -0600161
Jon Ashburn27cd5842015-05-12 17:26:48 -0600162 *pInstance = (VkInstance) ptr_instance;
Jon Ashburneed0c002015-05-21 17:42:17 -0600163
164 res = ptr_instance->disp->CreateInstance(pCreateInfo, pInstance);
165
Courtney Goeltzenleuchterd971b612015-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 Ashburn6301a0f2015-05-29 13:15:39 -0600174 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn27cd5842015-05-12 17:26:48 -0600175 return res;
176}
177
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600178LOADER_EXPORT void VKAPI vkDestroyInstance(
Jon Ashburn27cd5842015-05-12 17:26:48 -0600179 VkInstance instance)
180{
181 const VkLayerInstanceDispatchTable *disp;
Jon Ashburne0e64572015-09-30 12:56:42 -0600182 struct loader_instance *ptr_instance = NULL;
Jon Ashburn27cd5842015-05-12 17:26:48 -0600183 disp = loader_get_instance_dispatch(instance);
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600184
Jon Ashburn6301a0f2015-05-29 13:15:39 -0600185 loader_platform_thread_lock_mutex(&loader_lock);
186
Jon Ashburne0e64572015-09-30 12:56:42 -0600187 ptr_instance = loader_get_instance(instance);
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600188 disp->DestroyInstance(instance);
Courtney Goeltzenleuchterf579fa62015-06-10 17:39:03 -0600189
Courtney Goeltzenleuchter7d0023c2015-06-08 15:09:22 -0600190 loader_deactivate_instance_layers(ptr_instance);
Jon Ashburneacfa3a2015-08-14 12:51:47 -0600191 loader_heap_free(ptr_instance, ptr_instance->disp);
192 loader_heap_free(ptr_instance, ptr_instance);
Jon Ashburn6301a0f2015-05-29 13:15:39 -0600193 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn27cd5842015-05-12 17:26:48 -0600194}
Jon Ashburn95a77ba2015-05-15 15:09:35 -0600195
Jon Ashburn27cd5842015-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 Ashburn6301a0f2015-05-29 13:15:39 -0600202 VkResult res;
Jon Ashburn27cd5842015-05-12 17:26:48 -0600203 disp = loader_get_instance_dispatch(instance);
Jon Ashburn6301a0f2015-05-29 13:15:39 -0600204
205 loader_platform_thread_lock_mutex(&loader_lock);
206 res = disp->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount,
Jon Ashburn27cd5842015-05-12 17:26:48 -0600207 pPhysicalDevices);
Jon Ashburn6301a0f2015-05-29 13:15:39 -0600208 loader_platform_thread_unlock_mutex(&loader_lock);
209 return res;
Jon Ashburn27cd5842015-05-12 17:26:48 -0600210}
211
Jon Ashburn754864f2015-07-23 18:49:07 -0600212
213
214
215
216
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600217LOADER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jon Ashburn754864f2015-07-23 18:49:07 -0600218 VkPhysicalDevice gpu,
219 VkPhysicalDeviceFeatures *pFeatures)
220{
221 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn754864f2015-07-23 18:49:07 -0600222
223 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600224 disp->GetPhysicalDeviceFeatures(gpu, pFeatures);
Jon Ashburn754864f2015-07-23 18:49:07 -0600225}
226
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600227LOADER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jon Ashburn754864f2015-07-23 18:49:07 -0600228 VkPhysicalDevice gpu,
229 VkFormat format,
230 VkFormatProperties *pFormatInfo)
231{
232 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn754864f2015-07-23 18:49:07 -0600233
234 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600235 disp->GetPhysicalDeviceFormatProperties(gpu, format, pFormatInfo);
Jon Ashburn754864f2015-07-23 18:49:07 -0600236}
237
Courtney Goeltzenleuchter06d89472015-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 Ashburn754864f2015-07-23 18:49:07 -0600239{
240 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn754864f2015-07-23 18:49:07 -0600241
242 disp = loader_get_instance_dispatch(physicalDevice);
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600243 disp->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jon Ashburn754864f2015-07-23 18:49:07 -0600244}
245
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600246LOADER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jon Ashburn27cd5842015-05-12 17:26:48 -0600247 VkPhysicalDevice gpu,
Tony Barbour59a47322015-06-24 16:06:58 -0600248 VkPhysicalDeviceProperties* pProperties)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600249{
Jon Ashburn95a77ba2015-05-15 15:09:35 -0600250 const VkLayerInstanceDispatchTable *disp;
Jon Ashburnd55a3942015-05-06 09:02:10 -0600251
Jon Ashburn95a77ba2015-05-15 15:09:35 -0600252 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600253 disp->GetPhysicalDeviceProperties(gpu, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600254}
255
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600256LOADER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Tony Barbour59a47322015-06-24 16:06:58 -0600257 VkPhysicalDevice gpu,
Chia-I Wud50a7d72015-10-26 20:48:51 +0800258 uint32_t* pQueueFamilyPropertyCount,
Cody Northropd0802882015-08-03 17:04:53 -0600259 VkQueueFamilyProperties* pQueueProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600260{
261 const VkLayerInstanceDispatchTable *disp;
Tony Barbour59a47322015-06-24 16:06:58 -0600262
263 disp = loader_get_instance_dispatch(gpu);
Chia-I Wud50a7d72015-10-26 20:48:51 +0800264 disp->GetPhysicalDeviceQueueFamilyProperties(gpu, pQueueFamilyPropertyCount, pQueueProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600265}
266
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600267LOADER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Tony Barbour59a47322015-06-24 16:06:58 -0600268 VkPhysicalDevice gpu,
269 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
270{
271 const VkLayerInstanceDispatchTable *disp;
Tony Barbour59a47322015-06-24 16:06:58 -0600272
273 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600274 disp->GetPhysicalDeviceMemoryProperties(gpu, pMemoryProperties);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600275}
276
Jon Ashburn95a77ba2015-05-15 15:09:35 -0600277LOADER_EXPORT VkResult VKAPI vkCreateDevice(
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -0600278 VkPhysicalDevice gpu,
279 const VkDeviceCreateInfo* pCreateInfo,
280 VkDevice* pDevice)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600281{
Jon Ashburnd55a3942015-05-06 09:02:10 -0600282 VkResult res;
283
Jon Ashburn6301a0f2015-05-29 13:15:39 -0600284 loader_platform_thread_lock_mutex(&loader_lock);
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -0600285
286 res = loader_CreateDevice(gpu, pCreateInfo, pDevice);
287
Jon Ashburn6301a0f2015-05-29 13:15:39 -0600288 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600289 return res;
290}
291
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600292LOADER_EXPORT void VKAPI vkDestroyDevice(VkDevice device)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600293{
294 const VkLayerDispatchTable *disp;
Jon Ashburne39a4f82015-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 Ashburnd55a3942015-05-06 09:02:10 -0600298 disp = loader_get_dispatch(device);
299
Jon Ashburn6301a0f2015-05-29 13:15:39 -0600300 loader_platform_thread_lock_mutex(&loader_lock);
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600301 disp->DestroyDevice(device);
Jon Ashburne39a4f82015-08-28 13:38:21 -0600302 loader_remove_logical_device(inst, device);
Jon Ashburn6301a0f2015-05-29 13:15:39 -0600303 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn6301a0f2015-05-29 13:15:39 -0600304}
305
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600306LOADER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -0600307 VkPhysicalDevice physicalDevice,
308 const char* pLayerName,
Chia-I Wud50a7d72015-10-26 20:48:51 +0800309 uint32_t* pPropertyCount,
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -0600310 VkExtensionProperties* pProperties)
Jon Ashburn6301a0f2015-05-29 13:15:39 -0600311{
312 VkResult res;
313
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -0600314 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburnb2ef1372015-07-16 17:19:31 -0600315 //TODO convert over to using instance chain dispatch
Chia-I Wud50a7d72015-10-26 20:48:51 +0800316 res = loader_EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pPropertyCount, pProperties);
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -0600317 loader_platform_thread_unlock_mutex(&loader_lock);
Tony Barbour59a47322015-06-24 16:06:58 -0600318 return res;
319}
320
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600321LOADER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -0600322 VkPhysicalDevice physicalDevice,
Chia-I Wud50a7d72015-10-26 20:48:51 +0800323 uint32_t* pPropertyCount,
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -0600324 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600325{
326 VkResult res;
327
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -0600328 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburnb2ef1372015-07-16 17:19:31 -0600329 //TODO convert over to using instance chain dispatch
Chia-I Wud50a7d72015-10-26 20:48:51 +0800330 res = loader_EnumerateDeviceLayerProperties(physicalDevice, pPropertyCount, pProperties);
Courtney Goeltzenleuchter110fdf92015-06-29 15:39:26 -0600331 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn27cd5842015-05-12 17:26:48 -0600332 return res;
333}
334
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600335LOADER_EXPORT void VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600336{
337 const VkLayerDispatchTable *disp;
Jon Ashburnd55a3942015-05-06 09:02:10 -0600338
339 disp = loader_get_dispatch(device);
340
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600341 disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
342 loader_set_dispatch(*pQueue, disp);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600343}
344
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -0600345LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600346{
347 const VkLayerDispatchTable *disp;
348
349 disp = loader_get_dispatch(queue);
350
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -0600351 return disp->QueueSubmit(queue, submitCount, pSubmitInfo, fence);
Jon Ashburnd55a3942015-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 Lobodzinski2141f652015-09-07 13:59:43 -0600381LOADER_EXPORT void VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600382{
383 const VkLayerDispatchTable *disp;
384
385 disp = loader_get_dispatch(device);
386
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600387 disp->FreeMemory(device, mem);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600388}
389
Jon Ashburnd55a3942015-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 Lobodzinski2141f652015-09-07 13:59:43 -0600399LOADER_EXPORT void VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600400{
401 const VkLayerDispatchTable *disp;
402
403 disp = loader_get_dispatch(device);
404
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600405 disp->UnmapMemory(device, mem);
Jon Ashburnd55a3942015-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 Goeltzenleuchter06d89472015-10-20 16:40:38 -0600426LOADER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -0600427{
428 const VkLayerDispatchTable *disp;
429
430 disp = loader_get_dispatch(device);
431
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600432 disp->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -0600433}
434
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600435LOADER_EXPORT VkResult VKAPI vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600436{
437 const VkLayerDispatchTable *disp;
438
Mark Lobodzinski942b1722015-05-11 17:21:15 -0500439 disp = loader_get_dispatch(device);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600440
Tony Barbour1d2cd3f2015-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 Ashburnd55a3942015-05-06 09:02:10 -0600451}
452
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600453LOADER_EXPORT void VKAPI vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn754864f2015-07-23 18:49:07 -0600454{
455 const VkLayerDispatchTable *disp;
456
457 disp = loader_get_dispatch(device);
458
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600459 disp->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jon Ashburn754864f2015-07-23 18:49:07 -0600460}
461
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600462LOADER_EXPORT void VKAPI vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn754864f2015-07-23 18:49:07 -0600463{
464 const VkLayerDispatchTable *disp;
465
466 disp = loader_get_dispatch(device);
467
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600468 disp->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jon Ashburn754864f2015-07-23 18:49:07 -0600469}
470
Chia-I Wud50a7d72015-10-26 20:48:51 +0800471LOADER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600472{
473 const VkLayerDispatchTable *disp;
474
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -0600475 disp = loader_get_dispatch(device);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600476
Chia-I Wud50a7d72015-10-26 20:48:51 +0800477 disp->GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600478}
479
Chia-I Wud50a7d72015-10-26 20:48:51 +0800480LOADER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties)
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -0600481{
482 const VkLayerInstanceDispatchTable *disp;
483
484 disp = loader_get_instance_dispatch(physicalDevice);
485
Chia-I Wud50a7d72015-10-26 20:48:51 +0800486 disp->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -0600487}
488
Chia-I Wud50a7d72015-10-26 20:48:51 +0800489LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo)
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -0600490{
491 const VkLayerDispatchTable *disp;
492
493 disp = loader_get_dispatch(queue);
494
Chia-I Wud50a7d72015-10-26 20:48:51 +0800495 return disp->QueueBindSparseBufferMemory(queue, buffer, bindInfoCount, pBindInfo);
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -0600496}
497
Chia-I Wud50a7d72015-10-26 20:48:51 +0800498LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo)
Jon Ashburn754864f2015-07-23 18:49:07 -0600499{
500 const VkLayerDispatchTable *disp;
501
502 disp = loader_get_dispatch(queue);
503
Chia-I Wud50a7d72015-10-26 20:48:51 +0800504 return disp->QueueBindSparseImageOpaqueMemory(queue, image, bindInfoCount, pBindInfo);
Jon Ashburn754864f2015-07-23 18:49:07 -0600505}
506
Chia-I Wud50a7d72015-10-26 20:48:51 +0800507LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseImageMemoryBindInfo* pBindInfo)
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -0600508{
509 const VkLayerDispatchTable *disp;
510
511 disp = loader_get_dispatch(queue);
512
Chia-I Wud50a7d72015-10-26 20:48:51 +0800513 return disp->QueueBindSparseImageMemory(queue, image, bindInfoCount, pBindInfo);
Jon Ashburnd55a3942015-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 Lobodzinski2141f652015-09-07 13:59:43 -0600525LOADER_EXPORT void VKAPI vkDestroyFence(VkDevice device, VkFence fence)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600526{
527 const VkLayerDispatchTable *disp;
528
529 disp = loader_get_dispatch(device);
530
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600531 disp->DestroyFence(device, fence);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600532}
533
Courtney Goeltzenleuchter2bf8f902015-06-18 17:28:20 -0600534LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences)
Jon Ashburnd55a3942015-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 Goeltzenleuchtercd2a0992015-07-09 11:44:38 -0600552LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout)
Jon Ashburnd55a3942015-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 Lobodzinski2141f652015-09-07 13:59:43 -0600570LOADER_EXPORT void VKAPI vkDestroySemaphore(VkDevice device, VkSemaphore semaphore)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600571{
572 const VkLayerDispatchTable *disp;
573
574 disp = loader_get_dispatch(device);
575
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600576 disp->DestroySemaphore(device, semaphore);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600577}
578
Jon Ashburnd55a3942015-05-06 09:02:10 -0600579LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
580{
581 const VkLayerDispatchTable *disp;
582
583 disp = loader_get_dispatch(device);
584
585 return disp->CreateEvent(device, pCreateInfo, pEvent);
586}
587
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600588LOADER_EXPORT void VKAPI vkDestroyEvent(VkDevice device, VkEvent event)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600589{
590 const VkLayerDispatchTable *disp;
591
592 disp = loader_get_dispatch(device);
593
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600594 disp->DestroyEvent(device, event);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600595}
596
Jon Ashburnd55a3942015-05-06 09:02:10 -0600597LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
598{
599 const VkLayerDispatchTable *disp;
600
601 disp = loader_get_dispatch(device);
602
603 return disp->GetEventStatus(device, event);
604}
605
606LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
607{
608 const VkLayerDispatchTable *disp;
609
610 disp = loader_get_dispatch(device);
611
612 return disp->SetEvent(device, event);
613}
614
615LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
616{
617 const VkLayerDispatchTable *disp;
618
619 disp = loader_get_dispatch(device);
620
621 return disp->ResetEvent(device, event);
622}
623
624LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
625{
626 const VkLayerDispatchTable *disp;
627
628 disp = loader_get_dispatch(device);
629
630 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool);
631}
632
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600633LOADER_EXPORT void VKAPI vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600634{
635 const VkLayerDispatchTable *disp;
636
637 disp = loader_get_dispatch(device);
638
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600639 disp->DestroyQueryPool(device, queryPool);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600640}
641
Chia-I Wuccc93a72015-10-26 18:36:20 +0800642LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600643{
644 const VkLayerDispatchTable *disp;
645
646 disp = loader_get_dispatch(device);
647
Chia-I Wuccc93a72015-10-26 18:36:20 +0800648 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600649}
650
Jon Ashburnd55a3942015-05-06 09:02:10 -0600651LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
652{
653 const VkLayerDispatchTable *disp;
654
655 disp = loader_get_dispatch(device);
656
657 return disp->CreateBuffer(device, pCreateInfo, pBuffer);
658}
659
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600660LOADER_EXPORT void VKAPI vkDestroyBuffer(VkDevice device, VkBuffer buffer)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600661{
662 const VkLayerDispatchTable *disp;
663
664 disp = loader_get_dispatch(device);
665
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600666 disp->DestroyBuffer(device, buffer);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600667}
668
Jon Ashburnd55a3942015-05-06 09:02:10 -0600669LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
670{
671 const VkLayerDispatchTable *disp;
672
673 disp = loader_get_dispatch(device);
674
675 return disp->CreateBufferView(device, pCreateInfo, pView);
676}
677
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600678LOADER_EXPORT void VKAPI vkDestroyBufferView(VkDevice device, VkBufferView bufferView)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600679{
680 const VkLayerDispatchTable *disp;
681
682 disp = loader_get_dispatch(device);
683
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600684 disp->DestroyBufferView(device, bufferView);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600685}
686
Jon Ashburnd55a3942015-05-06 09:02:10 -0600687LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
688{
689 const VkLayerDispatchTable *disp;
690
691 disp = loader_get_dispatch(device);
692
693 return disp->CreateImage(device, pCreateInfo, pImage);
694}
695
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600696LOADER_EXPORT void VKAPI vkDestroyImage(VkDevice device, VkImage image)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600697{
698 const VkLayerDispatchTable *disp;
699
700 disp = loader_get_dispatch(device);
701
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600702 disp->DestroyImage(device, image);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600703}
704
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600705LOADER_EXPORT void VKAPI vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600706{
707 const VkLayerDispatchTable *disp;
708
709 disp = loader_get_dispatch(device);
710
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600711 disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600712}
713
714LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
715{
716 const VkLayerDispatchTable *disp;
717
718 disp = loader_get_dispatch(device);
719
720 return disp->CreateImageView(device, pCreateInfo, pView);
721}
722
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600723LOADER_EXPORT void VKAPI vkDestroyImageView(VkDevice device, VkImageView imageView)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600724{
725 const VkLayerDispatchTable *disp;
726
727 disp = loader_get_dispatch(device);
728
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600729 disp->DestroyImageView(device, imageView);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600730}
731
Courtney Goeltzenleuchter2d2cb682015-06-24 18:24:19 -0600732LOADER_EXPORT VkResult VKAPI vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShader)
733{
734 const VkLayerDispatchTable *disp;
735
736 disp = loader_get_dispatch(device);
737
738 return disp->CreateShaderModule(device, pCreateInfo, pShader);
739}
740
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600741LOADER_EXPORT void VKAPI vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600742{
743 const VkLayerDispatchTable *disp;
744
745 disp = loader_get_dispatch(device);
746
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600747 disp->DestroyShaderModule(device, shaderModule);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600748}
749
Jon Ashburnd55a3942015-05-06 09:02:10 -0600750LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
751{
752 const VkLayerDispatchTable *disp;
753
754 disp = loader_get_dispatch(device);
755
756 return disp->CreateShader(device, pCreateInfo, pShader);
757}
758
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600759LOADER_EXPORT void VKAPI vkDestroyShader(VkDevice device, VkShader shader)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600760{
761 const VkLayerDispatchTable *disp;
762
763 disp = loader_get_dispatch(device);
764
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600765 disp->DestroyShader(device, shader);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600766}
767
Jon Ashburnc669cc62015-07-09 15:02:25 -0600768LOADER_EXPORT VkResult VKAPI vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600769{
770 const VkLayerDispatchTable *disp;
771
772 disp = loader_get_dispatch(device);
773
Jon Ashburnc669cc62015-07-09 15:02:25 -0600774 return disp->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600775}
776
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600777LOADER_EXPORT void VKAPI vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600778{
779 const VkLayerDispatchTable *disp;
780
781 disp = loader_get_dispatch(device);
782
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600783 disp->DestroyPipelineCache(device, pipelineCache);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600784}
785
Chia-I Wub16facd2015-10-26 19:17:06 +0800786LOADER_EXPORT VkResult VKAPI vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600787{
788 const VkLayerDispatchTable *disp;
789
790 disp = loader_get_dispatch(device);
791
Chia-I Wub16facd2015-10-26 19:17:06 +0800792 return disp->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600793}
794
Jon Ashburnc669cc62015-07-09 15:02:25 -0600795LOADER_EXPORT VkResult VKAPI vkMergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600796{
797 const VkLayerDispatchTable *disp;
798
799 disp = loader_get_dispatch(device);
800
Jon Ashburnc669cc62015-07-09 15:02:25 -0600801 return disp->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600802}
803
Chia-I Wud50a7d72015-10-26 20:48:51 +0800804LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600805{
806 const VkLayerDispatchTable *disp;
807
808 disp = loader_get_dispatch(device);
809
Chia-I Wud50a7d72015-10-26 20:48:51 +0800810 return disp->CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pPipelines);
Jon Ashburnc669cc62015-07-09 15:02:25 -0600811}
812
Chia-I Wud50a7d72015-10-26 20:48:51 +0800813LOADER_EXPORT VkResult VKAPI vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines)
Jon Ashburnc669cc62015-07-09 15:02:25 -0600814{
815 const VkLayerDispatchTable *disp;
816
817 disp = loader_get_dispatch(device);
818
Chia-I Wud50a7d72015-10-26 20:48:51 +0800819 return disp->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pPipelines);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600820}
821
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600822LOADER_EXPORT void VKAPI vkDestroyPipeline(VkDevice device, VkPipeline pipeline)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600823{
824 const VkLayerDispatchTable *disp;
825
826 disp = loader_get_dispatch(device);
827
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600828 disp->DestroyPipeline(device, pipeline);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600829}
830
Jon Ashburnd55a3942015-05-06 09:02:10 -0600831LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
832{
833 const VkLayerDispatchTable *disp;
834
835 disp = loader_get_dispatch(device);
836
837 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
838}
839
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600840LOADER_EXPORT void VKAPI vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600841{
842 const VkLayerDispatchTable *disp;
843
844 disp = loader_get_dispatch(device);
845
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600846 disp->DestroyPipelineLayout(device, pipelineLayout);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600847}
848
Jon Ashburnd55a3942015-05-06 09:02:10 -0600849LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
850{
851 const VkLayerDispatchTable *disp;
852
853 disp = loader_get_dispatch(device);
854
855 return disp->CreateSampler(device, pCreateInfo, pSampler);
856}
857
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600858LOADER_EXPORT void VKAPI vkDestroySampler(VkDevice device, VkSampler sampler)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600859{
860 const VkLayerDispatchTable *disp;
861
862 disp = loader_get_dispatch(device);
863
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600864 disp->DestroySampler(device, sampler);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600865}
866
867
Jon Ashburnd55a3942015-05-06 09:02:10 -0600868LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
869{
870 const VkLayerDispatchTable *disp;
871
872 disp = loader_get_dispatch(device);
873
874 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
875}
876
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600877LOADER_EXPORT void VKAPI vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600878{
879 const VkLayerDispatchTable *disp;
880
881 disp = loader_get_dispatch(device);
882
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600883 disp->DestroyDescriptorSetLayout(device, descriptorSetLayout);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600884}
885
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -0600886LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600887{
888 const VkLayerDispatchTable *disp;
889
890 disp = loader_get_dispatch(device);
891
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -0600892 return disp->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600893}
894
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600895LOADER_EXPORT void VKAPI vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600896{
897 const VkLayerDispatchTable *disp;
898
899 disp = loader_get_dispatch(device);
900
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600901 disp->DestroyDescriptorPool(device, descriptorPool);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -0600902}
903
904
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -0600905LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600906{
907 const VkLayerDispatchTable *disp;
908
909 disp = loader_get_dispatch(device);
910
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -0600911 return disp->ResetDescriptorPool(device, descriptorPool, flags);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600912}
913
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -0600914LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, const VkDescriptorSetAllocInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600915{
916 const VkLayerDispatchTable *disp;
917
918 disp = loader_get_dispatch(device);
919
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -0600920 return disp->AllocDescriptorSets(device, pAllocInfo, pDescriptorSets);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600921}
922
Chia-I Wud50a7d72015-10-26 20:48:51 +0800923LOADER_EXPORT VkResult VKAPI vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets)
Tony Barbour34ec6922015-07-10 10:50:45 -0600924{
925 const VkLayerDispatchTable *disp;
926
927 disp = loader_get_dispatch(device);
928
Chia-I Wud50a7d72015-10-26 20:48:51 +0800929 return disp->FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
Tony Barbour34ec6922015-07-10 10:50:45 -0600930}
931
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600932LOADER_EXPORT void VKAPI vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600933{
934 const VkLayerDispatchTable *disp;
935
936 disp = loader_get_dispatch(device);
937
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600938 disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jon Ashburnd55a3942015-05-06 09:02:10 -0600939}
940
Jon Ashburn754864f2015-07-23 18:49:07 -0600941LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
942{
943 const VkLayerDispatchTable *disp;
944
945 disp = loader_get_dispatch(device);
946
947 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
948}
949
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600950LOADER_EXPORT void VKAPI vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer)
Jon Ashburn754864f2015-07-23 18:49:07 -0600951{
952 const VkLayerDispatchTable *disp;
953
954 disp = loader_get_dispatch(device);
955
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600956 disp->DestroyFramebuffer(device, framebuffer);
Jon Ashburn754864f2015-07-23 18:49:07 -0600957}
958
959LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
960{
961 const VkLayerDispatchTable *disp;
962
963 disp = loader_get_dispatch(device);
964
965 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass);
966}
967
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600968LOADER_EXPORT void VKAPI vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass)
Jon Ashburn754864f2015-07-23 18:49:07 -0600969{
970 const VkLayerDispatchTable *disp;
971
972 disp = loader_get_dispatch(device);
973
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600974 disp->DestroyRenderPass(device, renderPass);
Jon Ashburn754864f2015-07-23 18:49:07 -0600975}
976
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600977LOADER_EXPORT void VKAPI vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity)
Jon Ashburn754864f2015-07-23 18:49:07 -0600978{
979 const VkLayerDispatchTable *disp;
980
981 disp = loader_get_dispatch(device);
982
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -0600983 disp->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jon Ashburn754864f2015-07-23 18:49:07 -0600984}
985
Cody Northrope62183e2015-07-09 18:08:05 -0600986LOADER_EXPORT VkResult VKAPI vkCreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool)
987{
988 const VkLayerDispatchTable *disp;
989
990 disp = loader_get_dispatch(device);
991
992 return disp->CreateCommandPool(device, pCreateInfo, pCmdPool);
993}
994
Mark Lobodzinski2141f652015-09-07 13:59:43 -0600995LOADER_EXPORT void VKAPI vkDestroyCommandPool(VkDevice device, VkCmdPool cmdPool)
Cody Northrope62183e2015-07-09 18:08:05 -0600996{
997 const VkLayerDispatchTable *disp;
998
999 disp = loader_get_dispatch(device);
1000
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001001 disp->DestroyCommandPool(device, cmdPool);
Cody Northrope62183e2015-07-09 18:08:05 -06001002}
1003
1004LOADER_EXPORT VkResult VKAPI vkResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags)
1005{
1006 const VkLayerDispatchTable *disp;
1007
1008 disp = loader_get_dispatch(device);
1009
1010 return disp->ResetCommandPool(device, cmdPool, flags);
1011}
1012
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06001013LOADER_EXPORT VkResult VKAPI vkAllocCommandBuffers(
1014 VkDevice device,
1015 const VkCmdBufferAllocInfo* pAllocInfo,
1016 VkCmdBuffer* pCmdBuffers)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001017{
1018 const VkLayerDispatchTable *disp;
1019 VkResult res;
1020
1021 disp = loader_get_dispatch(device);
1022
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06001023 res = disp->AllocCommandBuffers(device, pAllocInfo, pCmdBuffers);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001024 if (res == VK_SUCCESS) {
Chia-I Wud50a7d72015-10-26 20:48:51 +08001025 for (uint32_t i =0; i < pAllocInfo->bufferCount; i++) {
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06001026 if (pCmdBuffers[i]) {
1027 loader_init_dispatch(pCmdBuffers[i], disp);
1028 }
1029 }
Jon Ashburnd55a3942015-05-06 09:02:10 -06001030 }
1031
1032 return res;
1033}
1034
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06001035LOADER_EXPORT void VKAPI vkFreeCommandBuffers(
1036 VkDevice device,
1037 VkCmdPool cmdPool,
Chia-I Wud50a7d72015-10-26 20:48:51 +08001038 uint32_t commandBufferCount,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06001039 const VkCmdBuffer* pCommandBuffers)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -06001040{
1041 const VkLayerDispatchTable *disp;
1042
1043 disp = loader_get_dispatch(device);
1044
Chia-I Wud50a7d72015-10-26 20:48:51 +08001045 disp->FreeCommandBuffers(device, cmdPool, commandBufferCount, pCommandBuffers);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -06001046}
1047
Jon Ashburnd55a3942015-05-06 09:02:10 -06001048LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
1049{
1050 const VkLayerDispatchTable *disp;
1051
1052 disp = loader_get_dispatch(cmdBuffer);
1053
1054 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo);
1055}
1056
1057LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
1058{
1059 const VkLayerDispatchTable *disp;
1060
1061 disp = loader_get_dispatch(cmdBuffer);
1062
1063 return disp->EndCommandBuffer(cmdBuffer);
1064}
1065
Cody Northrope62183e2015-07-09 18:08:05 -06001066LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001067{
1068 const VkLayerDispatchTable *disp;
1069
1070 disp = loader_get_dispatch(cmdBuffer);
1071
Cody Northrope62183e2015-07-09 18:08:05 -06001072 return disp->ResetCommandBuffer(cmdBuffer, flags);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001073}
1074
1075LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
1076{
1077 const VkLayerDispatchTable *disp;
1078
1079 disp = loader_get_dispatch(cmdBuffer);
1080
1081 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
1082}
1083
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06001084LOADER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001085{
1086 const VkLayerDispatchTable *disp;
1087
1088 disp = loader_get_dispatch(cmdBuffer);
1089
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06001090 disp->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
1091}
1092
1093LOADER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
1094{
1095 const VkLayerDispatchTable *disp;
1096
1097 disp = loader_get_dispatch(cmdBuffer);
1098
1099 disp->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -06001100}
1101
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06001102LOADER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -06001103{
1104 const VkLayerDispatchTable *disp;
1105
1106 disp = loader_get_dispatch(cmdBuffer);
1107
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06001108 disp->CmdSetLineWidth(cmdBuffer, lineWidth);
Cody Northrop12365112015-08-17 11:10:49 -06001109}
1110
Chia-I Wud8c946a2015-10-26 19:08:09 +08001111LOADER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Cody Northrop12365112015-08-17 11:10:49 -06001112{
1113 const VkLayerDispatchTable *disp;
1114
1115 disp = loader_get_dispatch(cmdBuffer);
1116
Chia-I Wud8c946a2015-10-26 19:08:09 +08001117 disp->CmdSetDepthBias(cmdBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -06001118}
1119
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06001120LOADER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Tony Barbour1d2cd3f2015-07-03 10:33:54 -06001121{
1122 const VkLayerDispatchTable *disp;
1123
1124 disp = loader_get_dispatch(cmdBuffer);
1125
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06001126 disp->CmdSetBlendConstants(cmdBuffer, blendConst);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -06001127}
1128
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06001129LOADER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Tony Barbour1d2cd3f2015-07-03 10:33:54 -06001130{
1131 const VkLayerDispatchTable *disp;
1132
1133 disp = loader_get_dispatch(cmdBuffer);
1134
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06001135 disp->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop82485a82015-08-18 15:21:16 -06001136}
1137
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06001138LOADER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northrop82485a82015-08-18 15:21:16 -06001139{
1140 const VkLayerDispatchTable *disp;
1141
1142 disp = loader_get_dispatch(cmdBuffer);
1143
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06001144 disp->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
1145}
1146
1147LOADER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
1148{
1149 const VkLayerDispatchTable *disp;
1150
1151 disp = loader_get_dispatch(cmdBuffer);
1152
1153 disp->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
1154}
1155
1156LOADER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
1157{
1158 const VkLayerDispatchTable *disp;
1159
1160 disp = loader_get_dispatch(cmdBuffer);
1161
1162 disp->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001163}
1164
Chia-I Wud50a7d72015-10-26 20:48:51 +08001165LOADER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001166{
1167 const VkLayerDispatchTable *disp;
1168
1169 disp = loader_get_dispatch(cmdBuffer);
1170
Chia-I Wud50a7d72015-10-26 20:48:51 +08001171 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001172}
1173
Jon Ashburnd55a3942015-05-06 09:02:10 -06001174LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
1175{
1176 const VkLayerDispatchTable *disp;
1177
1178 disp = loader_get_dispatch(cmdBuffer);
1179
1180 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
1181}
1182
Jon Ashburn754864f2015-07-23 18:49:07 -06001183LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
1184{
1185 const VkLayerDispatchTable *disp;
1186
1187 disp = loader_get_dispatch(cmdBuffer);
1188
1189 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
1190}
1191
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06001192LOADER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001193{
1194 const VkLayerDispatchTable *disp;
1195
1196 disp = loader_get_dispatch(cmdBuffer);
1197
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06001198 disp->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001199}
1200
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06001201LOADER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001202{
1203 const VkLayerDispatchTable *disp;
1204
1205 disp = loader_get_dispatch(cmdBuffer);
1206
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06001207 disp->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001208}
1209
Chia-I Wud50a7d72015-10-26 20:48:51 +08001210LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001211{
1212 const VkLayerDispatchTable *disp;
1213
1214 disp = loader_get_dispatch(cmdBuffer);
1215
Chia-I Wud50a7d72015-10-26 20:48:51 +08001216 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, drawCount, stride);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001217}
1218
Chia-I Wud50a7d72015-10-26 20:48:51 +08001219LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001220{
1221 const VkLayerDispatchTable *disp;
1222
1223 disp = loader_get_dispatch(cmdBuffer);
1224
Chia-I Wud50a7d72015-10-26 20:48:51 +08001225 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, drawCount, stride);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001226}
1227
1228LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
1229{
1230 const VkLayerDispatchTable *disp;
1231
1232 disp = loader_get_dispatch(cmdBuffer);
1233
1234 disp->CmdDispatch(cmdBuffer, x, y, z);
1235}
1236
1237LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
1238{
1239 const VkLayerDispatchTable *disp;
1240
1241 disp = loader_get_dispatch(cmdBuffer);
1242
1243 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset);
1244}
1245
1246LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
1247{
1248 const VkLayerDispatchTable *disp;
1249
1250 disp = loader_get_dispatch(cmdBuffer);
1251
1252 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
1253}
1254
1255LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
1256{
1257 const VkLayerDispatchTable *disp;
1258
1259 disp = loader_get_dispatch(cmdBuffer);
1260
1261 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1262}
1263
Mark Lobodzinskiee5eef12015-05-22 14:43:25 -05001264LOADER_EXPORT void VKAPI vkCmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001265{
1266 const VkLayerDispatchTable *disp;
1267
1268 disp = loader_get_dispatch(cmdBuffer);
1269
Mark Lobodzinskiee5eef12015-05-22 14:43:25 -05001270 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001271}
1272
1273LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
1274{
1275 const VkLayerDispatchTable *disp;
1276
1277 disp = loader_get_dispatch(cmdBuffer);
1278
1279 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
1280}
1281
1282LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
1283{
1284 const VkLayerDispatchTable *disp;
1285
1286 disp = loader_get_dispatch(cmdBuffer);
1287
1288 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
1289}
1290
Jon Ashburnd55a3942015-05-06 09:02:10 -06001291LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
1292{
1293 const VkLayerDispatchTable *disp;
1294
1295 disp = loader_get_dispatch(cmdBuffer);
1296
1297 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
1298}
1299
1300LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
1301{
1302 const VkLayerDispatchTable *disp;
1303
1304 disp = loader_get_dispatch(cmdBuffer);
1305
1306 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
1307}
1308
Chris Forbesf0796e12015-06-24 14:34:53 +12001309LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001310{
1311 const VkLayerDispatchTable *disp;
1312
1313 disp = loader_get_dispatch(cmdBuffer);
1314
1315 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
1316}
1317
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06001318LOADER_EXPORT void VKAPI vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001319{
1320 const VkLayerDispatchTable *disp;
1321
1322 disp = loader_get_dispatch(cmdBuffer);
1323
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06001324 disp->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Chris Forbesd9be82b2015-06-22 17:21:59 +12001325}
1326
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06001327LOADER_EXPORT void VKAPI vkCmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects)
Chris Forbesd9be82b2015-06-22 17:21:59 +12001328{
1329 const VkLayerDispatchTable *disp;
1330
1331 disp = loader_get_dispatch(cmdBuffer);
1332
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06001333 disp->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001334}
1335
1336LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
1337{
1338 const VkLayerDispatchTable *disp;
1339
1340 disp = loader_get_dispatch(cmdBuffer);
1341
1342 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1343}
1344
Tony Barbour0b2cfb22015-06-29 16:20:35 -06001345LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001346{
1347 const VkLayerDispatchTable *disp;
1348
1349 disp = loader_get_dispatch(cmdBuffer);
1350
Tony Barbour0b2cfb22015-06-29 16:20:35 -06001351 disp->CmdSetEvent(cmdBuffer, event, stageMask);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001352}
1353
Tony Barbour0b2cfb22015-06-29 16:20:35 -06001354LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001355{
1356 const VkLayerDispatchTable *disp;
1357
1358 disp = loader_get_dispatch(cmdBuffer);
1359
Tony Barbour0b2cfb22015-06-29 16:20:35 -06001360 disp->CmdResetEvent(cmdBuffer, event, stageMask);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001361}
1362
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06001363LOADER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags sourceStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001364{
1365 const VkLayerDispatchTable *disp;
1366
1367 disp = loader_get_dispatch(cmdBuffer);
1368
Tony Barbour0b2cfb22015-06-29 16:20:35 -06001369 disp->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001370}
1371
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06001372LOADER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkBool32 byRegion, uint32_t memBarrierCount, const void* const* ppMemBarriers)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001373{
1374 const VkLayerDispatchTable *disp;
1375
1376 disp = loader_get_dispatch(cmdBuffer);
1377
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06001378 disp->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001379}
1380
1381LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
1382{
1383 const VkLayerDispatchTable *disp;
1384
1385 disp = loader_get_dispatch(cmdBuffer);
1386
1387 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1388}
1389
1390LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
1391{
1392 const VkLayerDispatchTable *disp;
1393
1394 disp = loader_get_dispatch(cmdBuffer);
1395
1396 disp->CmdEndQuery(cmdBuffer, queryPool, slot);
1397}
1398
1399LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
1400{
1401 const VkLayerDispatchTable *disp;
1402
1403 disp = loader_get_dispatch(cmdBuffer);
1404
1405 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1406}
1407
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08001408LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001409{
1410 const VkLayerDispatchTable *disp;
1411
1412 disp = loader_get_dispatch(cmdBuffer);
1413
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08001414 disp->CmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001415}
1416
Chia-I Wuccc93a72015-10-26 18:36:20 +08001417LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize stride, VkFlags flags)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001418{
1419 const VkLayerDispatchTable *disp;
1420
1421 disp = loader_get_dispatch(cmdBuffer);
1422
Chia-I Wuccc93a72015-10-26 18:36:20 +08001423 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001424}
1425
Chia-I Wud50677e2015-10-26 20:46:14 +08001426LOADER_EXPORT void VKAPI vkCmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001427{
1428 const VkLayerDispatchTable *disp;
1429
Jon Ashburn754864f2015-07-23 18:49:07 -06001430 disp = loader_get_dispatch(cmdBuffer);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001431
Chia-I Wud50677e2015-10-26 20:46:14 +08001432 disp->CmdPushConstants(cmdBuffer, layout, stageFlags, offset, size, values);
Tony Barbour1d2cd3f2015-07-03 10:33:54 -06001433}
1434
Chia-I Wu08accc62015-07-07 11:50:03 +08001435LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001436{
1437 const VkLayerDispatchTable *disp;
1438
1439 disp = loader_get_dispatch(cmdBuffer);
1440
Chia-I Wu08accc62015-07-07 11:50:03 +08001441 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
1442}
1443
1444LOADER_EXPORT void VKAPI vkCmdNextSubpass(VkCmdBuffer cmdBuffer, VkRenderPassContents contents)
1445{
1446 const VkLayerDispatchTable *disp;
1447
1448 disp = loader_get_dispatch(cmdBuffer);
1449
1450 disp->CmdNextSubpass(cmdBuffer, contents);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001451}
1452
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08001453LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer)
Jon Ashburnd55a3942015-05-06 09:02:10 -06001454{
1455 const VkLayerDispatchTable *disp;
1456
1457 disp = loader_get_dispatch(cmdBuffer);
1458
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08001459 disp->CmdEndRenderPass(cmdBuffer);
1460}
1461
1462LOADER_EXPORT void VKAPI vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers)
1463{
1464 const VkLayerDispatchTable *disp;
1465
1466 disp = loader_get_dispatch(cmdBuffer);
1467
1468 disp->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
Jon Ashburnd55a3942015-05-06 09:02:10 -06001469}