blob: 304860ab4e9c441b7dbd68bfb81742e156729abc [file] [log] [blame]
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001/*
Jon Ashburn2139a3e2015-05-06 09:02:10 -06002 *
Courtney Goeltzenleuchter8a17da52015-10-29 13:50:34 -06003 * Copyright (C) 2015 Valve Corporation
Jon Ashburn2139a3e2015-05-06 09:02:10 -06004 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included
13 * in all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
Courtney Goeltzenleuchter96cd7952015-10-30 11:14:30 -060022 *
23 * Author: Chris Forbes <chrisf@ijw.co.nz>
24 * Author: Cody Northrop <cody@lunarg.com>
25 * Author: Jon Ashburn <jon@lunarg.com>
26 * Author: Tony Barbour <tony@LunarG.com>
Jon Ashburn2139a3e2015-05-06 09:02:10 -060027 */
Courtney Goeltzenleuchterb620ace2015-07-05 11:28:29 -060028#define _GNU_SOURCE
Jon Ashburnfce93d92015-05-12 17:26:48 -060029#include <stdlib.h>
30#include <string.h>
Jon Ashburn2139a3e2015-05-06 09:02:10 -060031
Tobin Ehlis7a51d902015-07-03 10:34:49 -060032#include "vk_loader_platform.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060033#include "loader.h"
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060034#include "debug_report.h"
Ian Elliotta81e8ac2015-10-30 15:28:23 -060035#include "wsi.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060036
Tobin Ehlis3126f012015-05-13 11:57:18 -060037
Jon Ashburn2139a3e2015-05-06 09:02:10 -060038/* Trampoline entrypoints */
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +080039LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Courtney Goeltzenleuchter70c4ebc2015-06-08 15:13:50 -060040 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +080041 const VkAllocationCallbacks* pAllocator,
Courtney Goeltzenleuchter70c4ebc2015-06-08 15:13:50 -060042 VkInstance* pInstance)
Jon Ashburnfce93d92015-05-12 17:26:48 -060043{
44 struct loader_instance *ptr_instance = NULL;
Jon Ashburnfce93d92015-05-12 17:26:48 -060045 VkResult res = VK_ERROR_INITIALIZATION_FAILED;
Jon Ashburnfce93d92015-05-12 17:26:48 -060046
Jon Ashburn754f1992015-08-18 18:04:47 -060047 loader_platform_thread_once(&once_init, loader_initialize);
Jon Ashburnfce93d92015-05-12 17:26:48 -060048
Chia-I Wu69f40122015-10-26 21:10:41 +080049 if (pAllocator) {
Chia-I Wu1f851912015-10-27 18:04:07 +080050 ptr_instance = (struct loader_instance *) pAllocator->pfnAllocation(
Chia-I Wu69f40122015-10-26 21:10:41 +080051 pAllocator->pUserData,
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060052 sizeof(struct loader_instance),
53 sizeof(VkInstance),
Chia-I Wu1f851912015-10-27 18:04:07 +080054 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060055 } else {
56 ptr_instance = (struct loader_instance *) malloc(sizeof(struct loader_instance));
57 }
Jon Ashburnfce93d92015-05-12 17:26:48 -060058 if (ptr_instance == NULL) {
59 return VK_ERROR_OUT_OF_HOST_MEMORY;
60 }
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060061
Jon Ashburn413d6582015-08-28 15:19:27 -060062 tls_instance = ptr_instance;
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060063 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburn182b8302015-08-11 14:49:54 -060064 memset(ptr_instance, 0, sizeof(struct loader_instance));
Jon Ashburncedc15f2015-05-21 18:13:33 -060065
Chia-I Wu69f40122015-10-26 21:10:41 +080066 if (pAllocator) {
67 ptr_instance->alloc_callbacks = *pAllocator;
Courtney Goeltzenleuchterb620ace2015-07-05 11:28:29 -060068 }
69
Jon Ashburne9ca8fa2015-08-20 16:35:30 -060070 /* Due to implicit layers need to get layer list even if
Chia-I Wu763a7492015-10-26 20:48:51 +080071 * enabledLayerNameCount == 0 and VK_INSTANCE_LAYERS is unset. For now always
Jon Ashburne9ca8fa2015-08-20 16:35:30 -060072 * get layer list (both instance and device) via loader_layer_scan(). */
73 memset(&ptr_instance->instance_layer_list, 0, sizeof(ptr_instance->instance_layer_list));
74 memset(&ptr_instance->device_layer_list, 0, sizeof(ptr_instance->device_layer_list));
Jon Ashburne58f1a32015-08-28 13:38:21 -060075 loader_layer_scan(ptr_instance,
76
77
78 &ptr_instance->instance_layer_list,
79 &ptr_instance->device_layer_list);
Jon Ashburne9ca8fa2015-08-20 16:35:30 -060080
81 /* validate the app requested layers to be enabled */
Chia-I Wu763a7492015-10-26 20:48:51 +080082 if (pCreateInfo->enabledLayerNameCount > 0) {
83 res = loader_validate_layers(pCreateInfo->enabledLayerNameCount,
Jon Ashburne9ca8fa2015-08-20 16:35:30 -060084 pCreateInfo->ppEnabledLayerNames,
85 &ptr_instance->instance_layer_list);
86 if (res != VK_SUCCESS) {
Jon Ashburn19d11ea2015-10-09 09:40:30 -060087 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburne9ca8fa2015-08-20 16:35:30 -060088 return res;
89 }
90 }
91
Jon Ashburn754f1992015-08-18 18:04:47 -060092 /* Scan/discover all ICD libraries */
93 memset(&ptr_instance->icd_libs, 0, sizeof(ptr_instance->icd_libs));
Jon Ashburne58f1a32015-08-28 13:38:21 -060094 loader_icd_scan(ptr_instance, &ptr_instance->icd_libs);
Jon Ashburn754f1992015-08-18 18:04:47 -060095
Jon Ashburncfe4e682015-08-14 12:51:47 -060096 /* get extensions from all ICD's, merge so no duplicates, then validate */
Jon Ashburne58f1a32015-08-28 13:38:21 -060097 loader_get_icd_loader_instance_extensions(ptr_instance,
98 &ptr_instance->icd_libs,
99 &ptr_instance->ext_list);
100 res = loader_validate_instance_extensions(&ptr_instance->ext_list,
101 &ptr_instance->instance_layer_list,
102 pCreateInfo);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600103 if (res != VK_SUCCESS) {
Jon Ashburne58f1a32015-08-28 13:38:21 -0600104 loader_delete_layer_properties(ptr_instance,
105 &ptr_instance->device_layer_list);
106 loader_delete_layer_properties(ptr_instance,
107 &ptr_instance->instance_layer_list);
108 loader_scanned_icd_clear(ptr_instance, &ptr_instance->icd_libs);
Jon Ashburn8f6be302015-12-10 08:51:10 -0700109 loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)
110 &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),
Chia-I Wu1f851912015-10-27 18:04:07 +0800119 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600120 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);
Jon Ashburn8f6be302015-12-10 08:51:10 -0700127 loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)
Jon Ashburne58f1a32015-08-28 13:38:21 -0600128 &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);
Jon Ashburn8f6be302015-12-10 08:51:10 -0700148 loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)
Jon Ashburne58f1a32015-08-28 13:38:21 -0600149 &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 Elliotta81e8ac2015-10-30 15:28:23 -0600158 wsi_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
Chia-I Wu69f40122015-10-26 21:10:41 +0800164 res = ptr_instance->disp->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jon Ashburna179dcf2015-05-21 17:42:17 -0600165
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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800178LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wu69f40122015-10-26 21:10:41 +0800179 VkInstance instance,
Chia-I Wu1f851912015-10-27 18:04:07 +0800180 const VkAllocationCallbacks* pAllocator)
Jon Ashburnfce93d92015-05-12 17:26:48 -0600181{
182 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn0c5eea22015-09-30 12:56:42 -0600183 struct loader_instance *ptr_instance = NULL;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600184 disp = loader_get_instance_dispatch(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600185
Jon Ashburnb40f2562015-05-29 13:15:39 -0600186 loader_platform_thread_lock_mutex(&loader_lock);
187
Jon Ashburn0c5eea22015-09-30 12:56:42 -0600188 ptr_instance = loader_get_instance(instance);
Chia-I Wu69f40122015-10-26 21:10:41 +0800189 disp->DestroyInstance(instance, pAllocator);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600190
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600191 loader_deactivate_instance_layers(ptr_instance);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600192 loader_heap_free(ptr_instance, ptr_instance->disp);
193 loader_heap_free(ptr_instance, ptr_instance);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600194 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600195}
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600196
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800197LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jon Ashburnfce93d92015-05-12 17:26:48 -0600198 VkInstance instance,
199 uint32_t* pPhysicalDeviceCount,
200 VkPhysicalDevice* pPhysicalDevices)
201{
202 const VkLayerInstanceDispatchTable *disp;
Jon Ashburnb40f2562015-05-29 13:15:39 -0600203 VkResult res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600204 disp = loader_get_instance_dispatch(instance);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600205
206 loader_platform_thread_lock_mutex(&loader_lock);
207 res = disp->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount,
Jon Ashburnfce93d92015-05-12 17:26:48 -0600208 pPhysicalDevices);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600209 loader_platform_thread_unlock_mutex(&loader_lock);
210 return res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600211}
212
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800213LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jon Ashburn4e189562015-07-23 18:49:07 -0600214 VkPhysicalDevice gpu,
215 VkPhysicalDeviceFeatures *pFeatures)
216{
217 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn4e189562015-07-23 18:49:07 -0600218
219 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600220 disp->GetPhysicalDeviceFeatures(gpu, pFeatures);
Jon Ashburn4e189562015-07-23 18:49:07 -0600221}
222
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800223LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jon Ashburn4e189562015-07-23 18:49:07 -0600224 VkPhysicalDevice gpu,
225 VkFormat format,
226 VkFormatProperties *pFormatInfo)
227{
228 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn4e189562015-07-23 18:49:07 -0600229
230 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600231 disp->GetPhysicalDeviceFormatProperties(gpu, format, pFormatInfo);
Jon Ashburn4e189562015-07-23 18:49:07 -0600232}
233
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800234LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties)
Jon Ashburn4e189562015-07-23 18:49:07 -0600235{
236 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn4e189562015-07-23 18:49:07 -0600237
238 disp = loader_get_instance_dispatch(physicalDevice);
Chia-I Wu5202c542015-10-31 00:31:16 +0800239 return disp->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jon Ashburn4e189562015-07-23 18:49:07 -0600240}
241
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800242LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jon Ashburnfce93d92015-05-12 17:26:48 -0600243 VkPhysicalDevice gpu,
Tony Barbour426b9052015-06-24 16:06:58 -0600244 VkPhysicalDeviceProperties* pProperties)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600245{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600246 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600247
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600248 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600249 disp->GetPhysicalDeviceProperties(gpu, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600250}
251
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800252LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Tony Barbour426b9052015-06-24 16:06:58 -0600253 VkPhysicalDevice gpu,
Chia-I Wu763a7492015-10-26 20:48:51 +0800254 uint32_t* pQueueFamilyPropertyCount,
Cody Northropef72e2a2015-08-03 17:04:53 -0600255 VkQueueFamilyProperties* pQueueProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600256{
257 const VkLayerInstanceDispatchTable *disp;
Tony Barbour426b9052015-06-24 16:06:58 -0600258
259 disp = loader_get_instance_dispatch(gpu);
Chia-I Wu763a7492015-10-26 20:48:51 +0800260 disp->GetPhysicalDeviceQueueFamilyProperties(gpu, pQueueFamilyPropertyCount, pQueueProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600261}
262
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800263LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Tony Barbour426b9052015-06-24 16:06:58 -0600264 VkPhysicalDevice gpu,
265 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
266{
267 const VkLayerInstanceDispatchTable *disp;
Tony Barbour426b9052015-06-24 16:06:58 -0600268
269 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600270 disp->GetPhysicalDeviceMemoryProperties(gpu, pMemoryProperties);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600271}
272
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800273LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600274 VkPhysicalDevice gpu,
275 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +0800276 const VkAllocationCallbacks* pAllocator,
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600277 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600278{
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600279 VkResult res;
280
Jon Ashburnb40f2562015-05-29 13:15:39 -0600281 loader_platform_thread_lock_mutex(&loader_lock);
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600282
Chia-I Wu69f40122015-10-26 21:10:41 +0800283 res = loader_CreateDevice(gpu, pCreateInfo, pAllocator, pDevice);
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600284
Jon Ashburnb40f2562015-05-29 13:15:39 -0600285 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600286 return res;
287}
288
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800289LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600290{
291 const VkLayerDispatchTable *disp;
Jon Ashburne58f1a32015-08-28 13:38:21 -0600292 struct loader_device *dev;
293 struct loader_icd *icd = loader_get_icd_and_device(device, &dev);
294 const struct loader_instance *inst = icd->this_instance;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600295 disp = loader_get_dispatch(device);
296
Jon Ashburnb40f2562015-05-29 13:15:39 -0600297 loader_platform_thread_lock_mutex(&loader_lock);
Chia-I Wu69f40122015-10-26 21:10:41 +0800298 disp->DestroyDevice(device, pAllocator);
Jon Ashburndbf8cee2015-11-19 15:43:26 -0700299 dev->device = NULL;
300 loader_remove_logical_device(inst, icd, dev);
301
Jon Ashburnb40f2562015-05-29 13:15:39 -0600302 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600303}
304
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800305LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600306 VkPhysicalDevice physicalDevice,
307 const char* pLayerName,
Chia-I Wu763a7492015-10-26 20:48:51 +0800308 uint32_t* pPropertyCount,
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600309 VkExtensionProperties* pProperties)
Jon Ashburnb40f2562015-05-29 13:15:39 -0600310{
311 VkResult res;
312
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600313 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburndb5a5bc2015-11-02 17:40:01 -0700314
315 /* If pLayerName == NULL, then querying ICD extensions, pass this call
316 down the instance chain which will terminate in the ICD. This allows
317 layers to filter the extensions coming back up the chain.
318 If pLayerName != NULL then get layer extensions from manifest file. */
319 if (pLayerName == NULL || strlen(pLayerName) == 0) {
320 const VkLayerInstanceDispatchTable *disp;
321
322 disp = loader_get_instance_dispatch(physicalDevice);
323 res = disp->EnumerateDeviceExtensionProperties(physicalDevice, NULL, pPropertyCount, pProperties);
324 } else {
325 res = loader_EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pPropertyCount, pProperties);
326 }
327
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600328 loader_platform_thread_unlock_mutex(&loader_lock);
Tony Barbour426b9052015-06-24 16:06:58 -0600329 return res;
330}
331
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800332LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600333 VkPhysicalDevice physicalDevice,
Chia-I Wu763a7492015-10-26 20:48:51 +0800334 uint32_t* pPropertyCount,
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600335 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600336{
337 VkResult res;
338
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600339 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburndb5a5bc2015-11-02 17:40:01 -0700340
341 /* Don't dispatch this call down the instance chain, want all device layers
342 enumerated and instance chain may not contain all device layers */
Chia-I Wu763a7492015-10-26 20:48:51 +0800343 res = loader_EnumerateDeviceLayerProperties(physicalDevice, pPropertyCount, pProperties);
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600344 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600345 return res;
346}
347
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800348LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600349{
350 const VkLayerDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600351
352 disp = loader_get_dispatch(device);
353
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600354 disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
355 loader_set_dispatch(*pQueue, disp);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600356}
357
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800358LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600359{
360 const VkLayerDispatchTable *disp;
361
362 disp = loader_get_dispatch(queue);
363
Chia-I Wu483e7702015-10-26 17:20:32 +0800364 return disp->QueueSubmit(queue, submitCount, pSubmits, fence);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600365}
366
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800367LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(VkQueue queue)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600368{
369 const VkLayerDispatchTable *disp;
370
371 disp = loader_get_dispatch(queue);
372
373 return disp->QueueWaitIdle(queue);
374}
375
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800376LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(VkDevice device)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600377{
378 const VkLayerDispatchTable *disp;
379
380 disp = loader_get_dispatch(device);
381
382 return disp->DeviceWaitIdle(device);
383}
384
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800385LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600386{
387 const VkLayerDispatchTable *disp;
388
389 disp = loader_get_dispatch(device);
390
Chia-I Wu1f851912015-10-27 18:04:07 +0800391 return disp->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600392}
393
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800394LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkFreeMemory(VkDevice device, VkDeviceMemory mem, const VkAllocationCallbacks* pAllocator)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600395{
396 const VkLayerDispatchTable *disp;
397
398 disp = loader_get_dispatch(device);
399
Chia-I Wu69f40122015-10-26 21:10:41 +0800400 disp->FreeMemory(device, mem, pAllocator);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600401}
402
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800403LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600404{
405 const VkLayerDispatchTable *disp;
406
407 disp = loader_get_dispatch(device);
408
409 return disp->MapMemory(device, mem, offset, size, flags, ppData);
410}
411
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800412LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600413{
414 const VkLayerDispatchTable *disp;
415
416 disp = loader_get_dispatch(device);
417
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600418 disp->UnmapMemory(device, mem);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600419}
420
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800421LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600422{
423 const VkLayerDispatchTable *disp;
424
425 disp = loader_get_dispatch(device);
426
Chia-I Wu1f851912015-10-27 18:04:07 +0800427 return disp->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600428}
429
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800430LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600431{
432 const VkLayerDispatchTable *disp;
433
434 disp = loader_get_dispatch(device);
435
Chia-I Wu1f851912015-10-27 18:04:07 +0800436 return disp->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600437}
438
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800439LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -0600440{
441 const VkLayerDispatchTable *disp;
442
443 disp = loader_get_dispatch(device);
444
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600445 disp->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -0600446}
447
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800448LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600449{
450 const VkLayerDispatchTable *disp;
451
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500452 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600453
Tony Barbourde4124d2015-07-03 10:33:54 -0600454 return disp->BindBufferMemory(device, buffer, mem, offset);
455}
456
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800457LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize offset)
Tony Barbourde4124d2015-07-03 10:33:54 -0600458{
459 const VkLayerDispatchTable *disp;
460
461 disp = loader_get_dispatch(device);
462
463 return disp->BindImageMemory(device, image, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600464}
465
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800466LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn4e189562015-07-23 18:49:07 -0600467{
468 const VkLayerDispatchTable *disp;
469
470 disp = loader_get_dispatch(device);
471
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600472 disp->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jon Ashburn4e189562015-07-23 18:49:07 -0600473}
474
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800475LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn4e189562015-07-23 18:49:07 -0600476{
477 const VkLayerDispatchTable *disp;
478
479 disp = loader_get_dispatch(device);
480
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600481 disp->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jon Ashburn4e189562015-07-23 18:49:07 -0600482}
483
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800484LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600485{
486 const VkLayerDispatchTable *disp;
487
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600488 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600489
Chia-I Wu763a7492015-10-26 20:48:51 +0800490 disp->GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600491}
492
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800493LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties)
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600494{
495 const VkLayerInstanceDispatchTable *disp;
496
497 disp = loader_get_instance_dispatch(physicalDevice);
498
Chia-I Wu763a7492015-10-26 20:48:51 +0800499 disp->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600500}
501
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800502LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600503{
504 const VkLayerDispatchTable *disp;
505
506 disp = loader_get_dispatch(queue);
507
Chia-I Wu06809d52015-10-26 16:55:27 +0800508 return disp->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600509}
510
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800511LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600512{
513 const VkLayerDispatchTable *disp;
514
515 disp = loader_get_dispatch(device);
516
Chia-I Wu69f40122015-10-26 21:10:41 +0800517 return disp->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600518}
519
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800520LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600521{
522 const VkLayerDispatchTable *disp;
523
524 disp = loader_get_dispatch(device);
525
Chia-I Wu69f40122015-10-26 21:10:41 +0800526 disp->DestroyFence(device, fence, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600527}
528
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800529LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600530{
531 const VkLayerDispatchTable *disp;
532
533 disp = loader_get_dispatch(device);
534
535 return disp->ResetFences(device, fenceCount, pFences);
536}
537
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800538LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(VkDevice device, VkFence fence)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600539{
540 const VkLayerDispatchTable *disp;
541
542 disp = loader_get_dispatch(device);
543
544 return disp->GetFenceStatus(device, fence);
545}
546
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800547LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600548{
549 const VkLayerDispatchTable *disp;
550
551 disp = loader_get_dispatch(device);
552
553 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
554}
555
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800556LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600557{
558 const VkLayerDispatchTable *disp;
559
560 disp = loader_get_dispatch(device);
561
Chia-I Wu69f40122015-10-26 21:10:41 +0800562 return disp->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600563}
564
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800565LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600566{
567 const VkLayerDispatchTable *disp;
568
569 disp = loader_get_dispatch(device);
570
Chia-I Wu69f40122015-10-26 21:10:41 +0800571 disp->DestroySemaphore(device, semaphore, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600572}
573
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800574LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600575{
576 const VkLayerDispatchTable *disp;
577
578 disp = loader_get_dispatch(device);
579
Chia-I Wu69f40122015-10-26 21:10:41 +0800580 return disp->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600581}
582
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800583LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600584{
585 const VkLayerDispatchTable *disp;
586
587 disp = loader_get_dispatch(device);
588
Chia-I Wu69f40122015-10-26 21:10:41 +0800589 disp->DestroyEvent(device, event, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600590}
591
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800592LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(VkDevice device, VkEvent event)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600593{
594 const VkLayerDispatchTable *disp;
595
596 disp = loader_get_dispatch(device);
597
598 return disp->GetEventStatus(device, event);
599}
600
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800601LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(VkDevice device, VkEvent event)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600602{
603 const VkLayerDispatchTable *disp;
604
605 disp = loader_get_dispatch(device);
606
607 return disp->SetEvent(device, event);
608}
609
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800610LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(VkDevice device, VkEvent event)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600611{
612 const VkLayerDispatchTable *disp;
613
614 disp = loader_get_dispatch(device);
615
616 return disp->ResetEvent(device, event);
617}
618
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800619LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600620{
621 const VkLayerDispatchTable *disp;
622
623 disp = loader_get_dispatch(device);
624
Chia-I Wu69f40122015-10-26 21:10:41 +0800625 return disp->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600626}
627
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800628LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600629{
630 const VkLayerDispatchTable *disp;
631
632 disp = loader_get_dispatch(device);
633
Chia-I Wu69f40122015-10-26 21:10:41 +0800634 disp->DestroyQueryPool(device, queryPool, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600635}
636
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800637LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600638{
639 const VkLayerDispatchTable *disp;
640
641 disp = loader_get_dispatch(device);
642
Chia-I Wu1f6942d2015-10-26 18:36:20 +0800643 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600644}
645
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800646LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600647{
648 const VkLayerDispatchTable *disp;
649
650 disp = loader_get_dispatch(device);
651
Chia-I Wu69f40122015-10-26 21:10:41 +0800652 return disp->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600653}
654
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800655LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600656{
657 const VkLayerDispatchTable *disp;
658
659 disp = loader_get_dispatch(device);
660
Chia-I Wu69f40122015-10-26 21:10:41 +0800661 disp->DestroyBuffer(device, buffer, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600662}
663
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800664LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600665{
666 const VkLayerDispatchTable *disp;
667
668 disp = loader_get_dispatch(device);
669
Chia-I Wu69f40122015-10-26 21:10:41 +0800670 return disp->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600671}
672
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800673LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600674{
675 const VkLayerDispatchTable *disp;
676
677 disp = loader_get_dispatch(device);
678
Chia-I Wu69f40122015-10-26 21:10:41 +0800679 disp->DestroyBufferView(device, bufferView, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600680}
681
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800682LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600683{
684 const VkLayerDispatchTable *disp;
685
686 disp = loader_get_dispatch(device);
687
Chia-I Wu69f40122015-10-26 21:10:41 +0800688 return disp->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600689}
690
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800691LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600692{
693 const VkLayerDispatchTable *disp;
694
695 disp = loader_get_dispatch(device);
696
Chia-I Wu69f40122015-10-26 21:10:41 +0800697 disp->DestroyImage(device, image, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600698}
699
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800700LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600701{
702 const VkLayerDispatchTable *disp;
703
704 disp = loader_get_dispatch(device);
705
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600706 disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600707}
708
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800709LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600710{
711 const VkLayerDispatchTable *disp;
712
713 disp = loader_get_dispatch(device);
714
Chia-I Wu69f40122015-10-26 21:10:41 +0800715 return disp->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600716}
717
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800718LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600719{
720 const VkLayerDispatchTable *disp;
721
722 disp = loader_get_dispatch(device);
723
Chia-I Wu69f40122015-10-26 21:10:41 +0800724 disp->DestroyImageView(device, imageView, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600725}
726
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800727LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShader)
Courtney Goeltzenleuchter0b29b0d2015-06-24 18:24:19 -0600728{
729 const VkLayerDispatchTable *disp;
730
731 disp = loader_get_dispatch(device);
732
Chia-I Wu69f40122015-10-26 21:10:41 +0800733 return disp->CreateShaderModule(device, pCreateInfo, pAllocator, pShader);
Courtney Goeltzenleuchter0b29b0d2015-06-24 18:24:19 -0600734}
735
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800736LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600737{
738 const VkLayerDispatchTable *disp;
739
740 disp = loader_get_dispatch(device);
741
Chia-I Wu69f40122015-10-26 21:10:41 +0800742 disp->DestroyShaderModule(device, shaderModule, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600743}
744
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800745LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600746{
747 const VkLayerDispatchTable *disp;
748
749 disp = loader_get_dispatch(device);
750
Chia-I Wu69f40122015-10-26 21:10:41 +0800751 return disp->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600752}
753
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800754LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600755{
756 const VkLayerDispatchTable *disp;
757
758 disp = loader_get_dispatch(device);
759
Chia-I Wu69f40122015-10-26 21:10:41 +0800760 disp->DestroyPipelineCache(device, pipelineCache, pAllocator);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600761}
762
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800763LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600764{
765 const VkLayerDispatchTable *disp;
766
767 disp = loader_get_dispatch(device);
768
Chia-I Wu28c3c432015-10-26 19:17:06 +0800769 return disp->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600770}
771
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800772LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600773{
774 const VkLayerDispatchTable *disp;
775
776 disp = loader_get_dispatch(device);
777
Chia-I Wu1f851912015-10-27 18:04:07 +0800778 return disp->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600779}
780
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800781LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600782{
783 const VkLayerDispatchTable *disp;
784
785 disp = loader_get_dispatch(device);
786
Chia-I Wu69f40122015-10-26 21:10:41 +0800787 return disp->CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
Jon Ashburn0d60d272015-07-09 15:02:25 -0600788}
789
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800790LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
Jon Ashburn0d60d272015-07-09 15:02:25 -0600791{
792 const VkLayerDispatchTable *disp;
793
794 disp = loader_get_dispatch(device);
795
Chia-I Wu69f40122015-10-26 21:10:41 +0800796 return disp->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600797}
798
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800799LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600800{
801 const VkLayerDispatchTable *disp;
802
803 disp = loader_get_dispatch(device);
804
Chia-I Wu69f40122015-10-26 21:10:41 +0800805 disp->DestroyPipeline(device, pipeline, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600806}
807
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800808LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600809{
810 const VkLayerDispatchTable *disp;
811
812 disp = loader_get_dispatch(device);
813
Chia-I Wu69f40122015-10-26 21:10:41 +0800814 return disp->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600815}
816
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800817LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600818{
819 const VkLayerDispatchTable *disp;
820
821 disp = loader_get_dispatch(device);
822
Chia-I Wu69f40122015-10-26 21:10:41 +0800823 disp->DestroyPipelineLayout(device, pipelineLayout, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600824}
825
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800826LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600827{
828 const VkLayerDispatchTable *disp;
829
830 disp = loader_get_dispatch(device);
831
Chia-I Wu69f40122015-10-26 21:10:41 +0800832 return disp->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600833}
834
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800835LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600836{
837 const VkLayerDispatchTable *disp;
838
839 disp = loader_get_dispatch(device);
840
Chia-I Wu69f40122015-10-26 21:10:41 +0800841 disp->DestroySampler(device, sampler, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600842}
843
844
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800845LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600846{
847 const VkLayerDispatchTable *disp;
848
849 disp = loader_get_dispatch(device);
850
Chia-I Wu69f40122015-10-26 21:10:41 +0800851 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600852}
853
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800854LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600855{
856 const VkLayerDispatchTable *disp;
857
858 disp = loader_get_dispatch(device);
859
Chia-I Wu69f40122015-10-26 21:10:41 +0800860 disp->DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600861}
862
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800863LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600864{
865 const VkLayerDispatchTable *disp;
866
867 disp = loader_get_dispatch(device);
868
Chia-I Wu69f40122015-10-26 21:10:41 +0800869 return disp->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600870}
871
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800872LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600873{
874 const VkLayerDispatchTable *disp;
875
876 disp = loader_get_dispatch(device);
877
Chia-I Wu69f40122015-10-26 21:10:41 +0800878 disp->DestroyDescriptorPool(device, descriptorPool, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600879}
880
881
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800882LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600883{
884 const VkLayerDispatchTable *disp;
885
886 disp = loader_get_dispatch(device);
887
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -0600888 return disp->ResetDescriptorPool(device, descriptorPool, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600889}
890
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800891LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600892{
893 const VkLayerDispatchTable *disp;
894
895 disp = loader_get_dispatch(device);
896
Chia-I Wu1f851912015-10-27 18:04:07 +0800897 return disp->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600898}
899
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800900LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets)
Tony Barbourb857d312015-07-10 10:50:45 -0600901{
902 const VkLayerDispatchTable *disp;
903
904 disp = loader_get_dispatch(device);
905
Chia-I Wu763a7492015-10-26 20:48:51 +0800906 return disp->FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
Tony Barbourb857d312015-07-10 10:50:45 -0600907}
908
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800909LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600910{
911 const VkLayerDispatchTable *disp;
912
913 disp = loader_get_dispatch(device);
914
Chia-I Wu483e7702015-10-26 17:20:32 +0800915 disp->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600916}
917
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800918LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer)
Jon Ashburn4e189562015-07-23 18:49:07 -0600919{
920 const VkLayerDispatchTable *disp;
921
922 disp = loader_get_dispatch(device);
923
Chia-I Wu69f40122015-10-26 21:10:41 +0800924 return disp->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jon Ashburn4e189562015-07-23 18:49:07 -0600925}
926
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800927LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator)
Jon Ashburn4e189562015-07-23 18:49:07 -0600928{
929 const VkLayerDispatchTable *disp;
930
931 disp = loader_get_dispatch(device);
932
Chia-I Wu69f40122015-10-26 21:10:41 +0800933 disp->DestroyFramebuffer(device, framebuffer, pAllocator);
Jon Ashburn4e189562015-07-23 18:49:07 -0600934}
935
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800936LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass)
Jon Ashburn4e189562015-07-23 18:49:07 -0600937{
938 const VkLayerDispatchTable *disp;
939
940 disp = loader_get_dispatch(device);
941
Chia-I Wu69f40122015-10-26 21:10:41 +0800942 return disp->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jon Ashburn4e189562015-07-23 18:49:07 -0600943}
944
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800945LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator)
Jon Ashburn4e189562015-07-23 18:49:07 -0600946{
947 const VkLayerDispatchTable *disp;
948
949 disp = loader_get_dispatch(device);
950
Chia-I Wu69f40122015-10-26 21:10:41 +0800951 disp->DestroyRenderPass(device, renderPass, pAllocator);
Jon Ashburn4e189562015-07-23 18:49:07 -0600952}
953
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800954LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity)
Jon Ashburn4e189562015-07-23 18:49:07 -0600955{
956 const VkLayerDispatchTable *disp;
957
958 disp = loader_get_dispatch(device);
959
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600960 disp->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jon Ashburn4e189562015-07-23 18:49:07 -0600961}
962
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800963LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool)
Cody Northropf02f9f82015-07-09 18:08:05 -0600964{
965 const VkLayerDispatchTable *disp;
966
967 disp = loader_get_dispatch(device);
968
Chia-I Wu1f851912015-10-27 18:04:07 +0800969 return disp->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Cody Northropf02f9f82015-07-09 18:08:05 -0600970}
971
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800972LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator)
Cody Northropf02f9f82015-07-09 18:08:05 -0600973{
974 const VkLayerDispatchTable *disp;
975
976 disp = loader_get_dispatch(device);
977
Chia-I Wu1f851912015-10-27 18:04:07 +0800978 disp->DestroyCommandPool(device, commandPool, pAllocator);
Cody Northropf02f9f82015-07-09 18:08:05 -0600979}
980
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800981LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags)
Cody Northropf02f9f82015-07-09 18:08:05 -0600982{
983 const VkLayerDispatchTable *disp;
984
985 disp = loader_get_dispatch(device);
986
Chia-I Wu1f851912015-10-27 18:04:07 +0800987 return disp->ResetCommandPool(device, commandPool, flags);
Cody Northropf02f9f82015-07-09 18:08:05 -0600988}
989
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800990LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -0600991 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +0800992 const VkCommandBufferAllocateInfo* pAllocateInfo,
993 VkCommandBuffer* pCommandBuffers)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600994{
995 const VkLayerDispatchTable *disp;
996 VkResult res;
997
998 disp = loader_get_dispatch(device);
999
Chia-I Wu1f851912015-10-27 18:04:07 +08001000 res = disp->AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001001 if (res == VK_SUCCESS) {
Chia-I Wu1f851912015-10-27 18:04:07 +08001002 for (uint32_t i =0; i < pAllocateInfo->bufferCount; i++) {
1003 if (pCommandBuffers[i]) {
1004 loader_init_dispatch(pCommandBuffers[i], disp);
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06001005 }
1006 }
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001007 }
1008
1009 return res;
1010}
1011
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001012LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06001013 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08001014 VkCommandPool commandPool,
Chia-I Wu763a7492015-10-26 20:48:51 +08001015 uint32_t commandBufferCount,
Chia-I Wu1f851912015-10-27 18:04:07 +08001016 const VkCommandBuffer* pCommandBuffers)
Tony Barbourde4124d2015-07-03 10:33:54 -06001017{
1018 const VkLayerDispatchTable *disp;
1019
1020 disp = loader_get_dispatch(device);
1021
Chia-I Wu1f851912015-10-27 18:04:07 +08001022 disp->FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
Tony Barbourde4124d2015-07-03 10:33:54 -06001023}
1024
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001025LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001026{
1027 const VkLayerDispatchTable *disp;
1028
Chia-I Wu1f851912015-10-27 18:04:07 +08001029 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001030
Chia-I Wu1f851912015-10-27 18:04:07 +08001031 return disp->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001032}
1033
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001034LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(VkCommandBuffer commandBuffer)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001035{
1036 const VkLayerDispatchTable *disp;
1037
Chia-I Wu1f851912015-10-27 18:04:07 +08001038 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001039
Chia-I Wu1f851912015-10-27 18:04:07 +08001040 return disp->EndCommandBuffer(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001041}
1042
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001043LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001044{
1045 const VkLayerDispatchTable *disp;
1046
Chia-I Wu1f851912015-10-27 18:04:07 +08001047 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001048
Chia-I Wu1f851912015-10-27 18:04:07 +08001049 return disp->ResetCommandBuffer(commandBuffer, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001050}
1051
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001052LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001053{
1054 const VkLayerDispatchTable *disp;
1055
Chia-I Wu1f851912015-10-27 18:04:07 +08001056 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001057
Chia-I Wu1f851912015-10-27 18:04:07 +08001058 disp->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001059}
1060
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001061LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001062{
1063 const VkLayerDispatchTable *disp;
1064
Chia-I Wu1f851912015-10-27 18:04:07 +08001065 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001066
Chia-I Wu1f851912015-10-27 18:04:07 +08001067 disp->CmdSetViewport(commandBuffer, viewportCount, pViewports);
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06001068}
1069
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001070LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06001071{
1072 const VkLayerDispatchTable *disp;
1073
Chia-I Wu1f851912015-10-27 18:04:07 +08001074 disp = loader_get_dispatch(commandBuffer);
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06001075
Chia-I Wu1f851912015-10-27 18:04:07 +08001076 disp->CmdSetScissor(commandBuffer, scissorCount, pScissors);
Tony Barbourde4124d2015-07-03 10:33:54 -06001077}
1078
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001079LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Tony Barbourde4124d2015-07-03 10:33:54 -06001080{
1081 const VkLayerDispatchTable *disp;
1082
Chia-I Wu1f851912015-10-27 18:04:07 +08001083 disp = loader_get_dispatch(commandBuffer);
Tony Barbourde4124d2015-07-03 10:33:54 -06001084
Chia-I Wu1f851912015-10-27 18:04:07 +08001085 disp->CmdSetLineWidth(commandBuffer, lineWidth);
Cody Northropf5bd2252015-08-17 11:10:49 -06001086}
1087
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001088LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Cody Northropf5bd2252015-08-17 11:10:49 -06001089{
1090 const VkLayerDispatchTable *disp;
1091
Chia-I Wu1f851912015-10-27 18:04:07 +08001092 disp = loader_get_dispatch(commandBuffer);
Cody Northropf5bd2252015-08-17 11:10:49 -06001093
Chia-I Wu1f851912015-10-27 18:04:07 +08001094 disp->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Tony Barbourde4124d2015-07-03 10:33:54 -06001095}
1096
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001097LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Tony Barbourde4124d2015-07-03 10:33:54 -06001098{
1099 const VkLayerDispatchTable *disp;
1100
Chia-I Wu1f851912015-10-27 18:04:07 +08001101 disp = loader_get_dispatch(commandBuffer);
Tony Barbourde4124d2015-07-03 10:33:54 -06001102
Chia-I Wu1f851912015-10-27 18:04:07 +08001103 disp->CmdSetBlendConstants(commandBuffer, blendConstants);
Tony Barbourde4124d2015-07-03 10:33:54 -06001104}
1105
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001106LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Tony Barbourde4124d2015-07-03 10:33:54 -06001107{
1108 const VkLayerDispatchTable *disp;
1109
Chia-I Wu1f851912015-10-27 18:04:07 +08001110 disp = loader_get_dispatch(commandBuffer);
Tony Barbourde4124d2015-07-03 10:33:54 -06001111
Chia-I Wu1f851912015-10-27 18:04:07 +08001112 disp->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop2605cb02015-08-18 15:21:16 -06001113}
1114
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001115LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop2605cb02015-08-18 15:21:16 -06001116{
1117 const VkLayerDispatchTable *disp;
1118
Chia-I Wu1f851912015-10-27 18:04:07 +08001119 disp = loader_get_dispatch(commandBuffer);
Cody Northrop2605cb02015-08-18 15:21:16 -06001120
Chia-I Wuc51b1212015-10-27 19:25:11 +08001121 disp->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001122}
1123
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001124LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001125{
1126 const VkLayerDispatchTable *disp;
1127
Chia-I Wu1f851912015-10-27 18:04:07 +08001128 disp = loader_get_dispatch(commandBuffer);
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001129
Chia-I Wuc51b1212015-10-27 19:25:11 +08001130 disp->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001131}
1132
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001133LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001134{
1135 const VkLayerDispatchTable *disp;
1136
Chia-I Wu1f851912015-10-27 18:04:07 +08001137 disp = loader_get_dispatch(commandBuffer);
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001138
Chia-I Wuc51b1212015-10-27 19:25:11 +08001139 disp->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001140}
1141
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001142LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001143{
1144 const VkLayerDispatchTable *disp;
1145
Chia-I Wu1f851912015-10-27 18:04:07 +08001146 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001147
Chia-I Wu1f851912015-10-27 18:04:07 +08001148 disp->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001149}
1150
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001151LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001152{
1153 const VkLayerDispatchTable *disp;
1154
Chia-I Wu1f851912015-10-27 18:04:07 +08001155 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001156
Chia-I Wu1f851912015-10-27 18:04:07 +08001157 disp->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001158}
1159
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001160LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
Jon Ashburn4e189562015-07-23 18:49:07 -06001161{
1162 const VkLayerDispatchTable *disp;
1163
Chia-I Wu1f851912015-10-27 18:04:07 +08001164 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn4e189562015-07-23 18:49:07 -06001165
Chia-I Wu1f851912015-10-27 18:04:07 +08001166 disp->CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
Jon Ashburn4e189562015-07-23 18:49:07 -06001167}
1168
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001169LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001170{
1171 const VkLayerDispatchTable *disp;
1172
Chia-I Wu1f851912015-10-27 18:04:07 +08001173 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001174
Chia-I Wu1f851912015-10-27 18:04:07 +08001175 disp->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001176}
1177
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001178LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001179{
1180 const VkLayerDispatchTable *disp;
1181
Chia-I Wu1f851912015-10-27 18:04:07 +08001182 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001183
Chia-I Wu1f851912015-10-27 18:04:07 +08001184 disp->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001185}
1186
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001187LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001188{
1189 const VkLayerDispatchTable *disp;
1190
Chia-I Wu1f851912015-10-27 18:04:07 +08001191 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001192
Chia-I Wu1f851912015-10-27 18:04:07 +08001193 disp->CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001194}
1195
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001196LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001197{
1198 const VkLayerDispatchTable *disp;
1199
Chia-I Wu1f851912015-10-27 18:04:07 +08001200 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001201
Chia-I Wu1f851912015-10-27 18:04:07 +08001202 disp->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001203}
1204
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001205LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001206{
1207 const VkLayerDispatchTable *disp;
1208
Chia-I Wu1f851912015-10-27 18:04:07 +08001209 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001210
Chia-I Wu1f851912015-10-27 18:04:07 +08001211 disp->CmdDispatch(commandBuffer, x, y, z);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001212}
1213
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001214LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001215{
1216 const VkLayerDispatchTable *disp;
1217
Chia-I Wu1f851912015-10-27 18:04:07 +08001218 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001219
Chia-I Wu1f851912015-10-27 18:04:07 +08001220 disp->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001221}
1222
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001223LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001224{
1225 const VkLayerDispatchTable *disp;
1226
Chia-I Wu1f851912015-10-27 18:04:07 +08001227 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001228
Chia-I Wu1f851912015-10-27 18:04:07 +08001229 disp->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001230}
1231
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001232LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001233{
1234 const VkLayerDispatchTable *disp;
1235
Chia-I Wu1f851912015-10-27 18:04:07 +08001236 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001237
Chia-I Wu1f851912015-10-27 18:04:07 +08001238 disp->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001239}
1240
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001241LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001242{
1243 const VkLayerDispatchTable *disp;
1244
Chia-I Wu1f851912015-10-27 18:04:07 +08001245 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001246
Chia-I Wu1f851912015-10-27 18:04:07 +08001247 disp->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001248}
1249
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001250LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001251{
1252 const VkLayerDispatchTable *disp;
1253
Chia-I Wu1f851912015-10-27 18:04:07 +08001254 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001255
Chia-I Wu1f851912015-10-27 18:04:07 +08001256 disp->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001257}
1258
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001259LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001260{
1261 const VkLayerDispatchTable *disp;
1262
Chia-I Wu1f851912015-10-27 18:04:07 +08001263 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001264
Chia-I Wu1f851912015-10-27 18:04:07 +08001265 disp->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001266}
1267
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001268LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const uint32_t* pData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001269{
1270 const VkLayerDispatchTable *disp;
1271
Chia-I Wu1f851912015-10-27 18:04:07 +08001272 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001273
Chia-I Wu1f851912015-10-27 18:04:07 +08001274 disp->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001275}
1276
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001277LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001278{
1279 const VkLayerDispatchTable *disp;
1280
Chia-I Wu1f851912015-10-27 18:04:07 +08001281 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001282
Chia-I Wu1f851912015-10-27 18:04:07 +08001283 disp->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001284}
1285
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001286LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001287{
1288 const VkLayerDispatchTable *disp;
1289
Chia-I Wu1f851912015-10-27 18:04:07 +08001290 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001291
Chia-I Wu1f851912015-10-27 18:04:07 +08001292 disp->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001293}
1294
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001295LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001296{
1297 const VkLayerDispatchTable *disp;
1298
Chia-I Wu1f851912015-10-27 18:04:07 +08001299 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001300
Chia-I Wu1f851912015-10-27 18:04:07 +08001301 disp->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Chris Forbes2951d7d2015-06-22 17:21:59 +12001302}
1303
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001304LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects)
Chris Forbes2951d7d2015-06-22 17:21:59 +12001305{
1306 const VkLayerDispatchTable *disp;
1307
Chia-I Wu1f851912015-10-27 18:04:07 +08001308 disp = loader_get_dispatch(commandBuffer);
Chris Forbes2951d7d2015-06-22 17:21:59 +12001309
Chia-I Wu1f851912015-10-27 18:04:07 +08001310 disp->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001311}
1312
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001313LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001314{
1315 const VkLayerDispatchTable *disp;
1316
Chia-I Wu1f851912015-10-27 18:04:07 +08001317 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001318
Chia-I Wu1f851912015-10-27 18:04:07 +08001319 disp->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001320}
1321
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001322LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001323{
1324 const VkLayerDispatchTable *disp;
1325
Chia-I Wu1f851912015-10-27 18:04:07 +08001326 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001327
Chia-I Wu1f851912015-10-27 18:04:07 +08001328 disp->CmdSetEvent(commandBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001329}
1330
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001331LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001332{
1333 const VkLayerDispatchTable *disp;
1334
Chia-I Wu1f851912015-10-27 18:04:07 +08001335 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001336
Chia-I Wu1f851912015-10-27 18:04:07 +08001337 disp->CmdResetEvent(commandBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001338}
1339
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001340LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags sourceStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001341{
1342 const VkLayerDispatchTable *disp;
1343
Chia-I Wu1f851912015-10-27 18:04:07 +08001344 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001345
Chia-I Wu1f851912015-10-27 18:04:07 +08001346 disp->CmdWaitEvents(commandBuffer, eventCount, pEvents, sourceStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001347}
1348
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001349LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001350{
1351 const VkLayerDispatchTable *disp;
1352
Chia-I Wu1f851912015-10-27 18:04:07 +08001353 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001354
Chia-I Wu1f851912015-10-27 18:04:07 +08001355 disp->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001356}
1357
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001358LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001359{
1360 const VkLayerDispatchTable *disp;
1361
Chia-I Wu1f851912015-10-27 18:04:07 +08001362 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001363
Chia-I Wu1f851912015-10-27 18:04:07 +08001364 disp->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001365}
1366
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001367LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001368{
1369 const VkLayerDispatchTable *disp;
1370
Chia-I Wu1f851912015-10-27 18:04:07 +08001371 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001372
Chia-I Wu1f851912015-10-27 18:04:07 +08001373 disp->CmdEndQuery(commandBuffer, queryPool, slot);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001374}
1375
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001376LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001377{
1378 const VkLayerDispatchTable *disp;
1379
Chia-I Wu1f851912015-10-27 18:04:07 +08001380 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001381
Chia-I Wu1f851912015-10-27 18:04:07 +08001382 disp->CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001383}
1384
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001385LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001386{
1387 const VkLayerDispatchTable *disp;
1388
Chia-I Wu1f851912015-10-27 18:04:07 +08001389 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001390
Chia-I Wu1f851912015-10-27 18:04:07 +08001391 disp->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001392}
1393
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001394LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkFlags flags)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001395{
1396 const VkLayerDispatchTable *disp;
1397
Chia-I Wu1f851912015-10-27 18:04:07 +08001398 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001399
Chia-I Wu1f851912015-10-27 18:04:07 +08001400 disp->CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001401}
1402
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08001403LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001404{
1405 const VkLayerDispatchTable *disp;
1406
Chia-I Wu1f851912015-10-27 18:04:07 +08001407 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001408
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08001409 disp->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Tony Barbourde4124d2015-07-03 10:33:54 -06001410}
1411
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001412LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001413{
1414 const VkLayerDispatchTable *disp;
1415
Chia-I Wu1f851912015-10-27 18:04:07 +08001416 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001417
Chia-I Wu1f851912015-10-27 18:04:07 +08001418 disp->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Chia-I Wuc278df82015-07-07 11:50:03 +08001419}
1420
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001421LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents)
Chia-I Wuc278df82015-07-07 11:50:03 +08001422{
1423 const VkLayerDispatchTable *disp;
1424
Chia-I Wu1f851912015-10-27 18:04:07 +08001425 disp = loader_get_dispatch(commandBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08001426
Chia-I Wu1f851912015-10-27 18:04:07 +08001427 disp->CmdNextSubpass(commandBuffer, contents);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001428}
1429
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001430LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(VkCommandBuffer commandBuffer)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001431{
1432 const VkLayerDispatchTable *disp;
1433
Chia-I Wu1f851912015-10-27 18:04:07 +08001434 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001435
Chia-I Wu1f851912015-10-27 18:04:07 +08001436 disp->CmdEndRenderPass(commandBuffer);
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001437}
1438
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001439LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount, const VkCommandBuffer* pCommandBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001440{
1441 const VkLayerDispatchTable *disp;
1442
Chia-I Wu1f851912015-10-27 18:04:07 +08001443 disp = loader_get_dispatch(commandBuffer);
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001444
Chia-I Wu1f851912015-10-27 18:04:07 +08001445 disp->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001446}