blob: a9a832d7fbe5fbc284dd7acd076ccaabe81ffb8c [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 Elliott1d73e662015-07-06 14:36:13 -060035#include "wsi_swapchain.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);
109 loader_destroy_ext_list(ptr_instance, &ptr_instance->ext_list);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600110 loader_platform_thread_unlock_mutex(&loader_lock);
111 loader_heap_free(ptr_instance, ptr_instance);
112 return res;
113 }
114
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600115 ptr_instance->disp = loader_heap_alloc(
116 ptr_instance,
117 sizeof(VkLayerInstanceDispatchTable),
Chia-I Wu1f851912015-10-27 18:04:07 +0800118 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600119 if (ptr_instance->disp == NULL) {
Jon Ashburne58f1a32015-08-28 13:38:21 -0600120 loader_delete_layer_properties(ptr_instance,
121 &ptr_instance->device_layer_list);
122 loader_delete_layer_properties(ptr_instance,
123 &ptr_instance->instance_layer_list);
124 loader_scanned_icd_clear(ptr_instance,
125 &ptr_instance->icd_libs);
126 loader_destroy_ext_list(ptr_instance,
127 &ptr_instance->ext_list);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600128 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600129 loader_heap_free(ptr_instance, ptr_instance);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600130 return VK_ERROR_OUT_OF_HOST_MEMORY;
131 }
132 memcpy(ptr_instance->disp, &instance_disp, sizeof(instance_disp));
133 ptr_instance->next = loader.instances;
134 loader.instances = ptr_instance;
135
Jon Ashburn182b8302015-08-11 14:49:54 -0600136 /* activate any layers on instance chain */
Jon Ashburne58f1a32015-08-28 13:38:21 -0600137 res = loader_enable_instance_layers(ptr_instance,
138 pCreateInfo,
139 &ptr_instance->instance_layer_list);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600140 if (res != VK_SUCCESS) {
Jon Ashburne58f1a32015-08-28 13:38:21 -0600141 loader_delete_layer_properties(ptr_instance,
142 &ptr_instance->device_layer_list);
143 loader_delete_layer_properties(ptr_instance,
144 &ptr_instance->instance_layer_list);
145 loader_scanned_icd_clear(ptr_instance,
146 &ptr_instance->icd_libs);
147 loader_destroy_ext_list(ptr_instance,
148 &ptr_instance->ext_list);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600149 loader.instances = ptr_instance->next;
150 loader_platform_thread_unlock_mutex(&loader_lock);
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -0600151 loader_heap_free(ptr_instance, ptr_instance->disp);
152 loader_heap_free(ptr_instance, ptr_instance);
153 return res;
154 }
Jon Ashburn182b8302015-08-11 14:49:54 -0600155 loader_activate_instance_layers(ptr_instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600156
Ian Elliott1d73e662015-07-06 14:36:13 -0600157 wsi_swapchain_create_instance(ptr_instance, pCreateInfo);
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600158 debug_report_create_instance(ptr_instance, pCreateInfo);
Jon Ashburncedc15f2015-05-21 18:13:33 -0600159
Jon Ashburnfce93d92015-05-12 17:26:48 -0600160
Jon Ashburnfce93d92015-05-12 17:26:48 -0600161 *pInstance = (VkInstance) ptr_instance;
Jon Ashburna179dcf2015-05-21 17:42:17 -0600162
Chia-I Wu69f40122015-10-26 21:10:41 +0800163 res = ptr_instance->disp->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jon Ashburna179dcf2015-05-21 17:42:17 -0600164
Courtney Goeltzenleuchter23b5f8d2015-06-17 20:51:59 -0600165 /*
166 * Finally have the layers in place and everyone has seen
167 * the CreateInstance command go by. This allows the layer's
168 * GetInstanceProcAddr functions to return valid extension functions
169 * if enabled.
170 */
171 loader_activate_instance_layer_extensions(ptr_instance);
172
Jon Ashburnb40f2562015-05-29 13:15:39 -0600173 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600174 return res;
175}
176
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800177LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wu69f40122015-10-26 21:10:41 +0800178 VkInstance instance,
Chia-I Wu1f851912015-10-27 18:04:07 +0800179 const VkAllocationCallbacks* pAllocator)
Jon Ashburnfce93d92015-05-12 17:26:48 -0600180{
181 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn0c5eea22015-09-30 12:56:42 -0600182 struct loader_instance *ptr_instance = NULL;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600183 disp = loader_get_instance_dispatch(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600184
Jon Ashburnb40f2562015-05-29 13:15:39 -0600185 loader_platform_thread_lock_mutex(&loader_lock);
186
Jon Ashburn0c5eea22015-09-30 12:56:42 -0600187 ptr_instance = loader_get_instance(instance);
Chia-I Wu69f40122015-10-26 21:10:41 +0800188 disp->DestroyInstance(instance, pAllocator);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600189
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600190 loader_deactivate_instance_layers(ptr_instance);
Jon Ashburncfe4e682015-08-14 12:51:47 -0600191 loader_heap_free(ptr_instance, ptr_instance->disp);
192 loader_heap_free(ptr_instance, ptr_instance);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600193 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600194}
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600195
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800196LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jon Ashburnfce93d92015-05-12 17:26:48 -0600197 VkInstance instance,
198 uint32_t* pPhysicalDeviceCount,
199 VkPhysicalDevice* pPhysicalDevices)
200{
201 const VkLayerInstanceDispatchTable *disp;
Jon Ashburnb40f2562015-05-29 13:15:39 -0600202 VkResult res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600203 disp = loader_get_instance_dispatch(instance);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600204
205 loader_platform_thread_lock_mutex(&loader_lock);
206 res = disp->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount,
Jon Ashburnfce93d92015-05-12 17:26:48 -0600207 pPhysicalDevices);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600208 loader_platform_thread_unlock_mutex(&loader_lock);
209 return res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600210}
211
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800212LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jon Ashburn4e189562015-07-23 18:49:07 -0600213 VkPhysicalDevice gpu,
214 VkPhysicalDeviceFeatures *pFeatures)
215{
216 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn4e189562015-07-23 18:49:07 -0600217
218 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600219 disp->GetPhysicalDeviceFeatures(gpu, pFeatures);
Jon Ashburn4e189562015-07-23 18:49:07 -0600220}
221
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800222LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jon Ashburn4e189562015-07-23 18:49:07 -0600223 VkPhysicalDevice gpu,
224 VkFormat format,
225 VkFormatProperties *pFormatInfo)
226{
227 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn4e189562015-07-23 18:49:07 -0600228
229 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600230 disp->GetPhysicalDeviceFormatProperties(gpu, format, pFormatInfo);
Jon Ashburn4e189562015-07-23 18:49:07 -0600231}
232
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800233LOADER_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 -0600234{
235 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn4e189562015-07-23 18:49:07 -0600236
237 disp = loader_get_instance_dispatch(physicalDevice);
Chia-I Wu5202c542015-10-31 00:31:16 +0800238 return disp->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jon Ashburn4e189562015-07-23 18:49:07 -0600239}
240
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800241LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jon Ashburnfce93d92015-05-12 17:26:48 -0600242 VkPhysicalDevice gpu,
Tony Barbour426b9052015-06-24 16:06:58 -0600243 VkPhysicalDeviceProperties* pProperties)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600244{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600245 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600246
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600247 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600248 disp->GetPhysicalDeviceProperties(gpu, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600249}
250
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800251LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Tony Barbour426b9052015-06-24 16:06:58 -0600252 VkPhysicalDevice gpu,
Chia-I Wu763a7492015-10-26 20:48:51 +0800253 uint32_t* pQueueFamilyPropertyCount,
Cody Northropef72e2a2015-08-03 17:04:53 -0600254 VkQueueFamilyProperties* pQueueProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600255{
256 const VkLayerInstanceDispatchTable *disp;
Tony Barbour426b9052015-06-24 16:06:58 -0600257
258 disp = loader_get_instance_dispatch(gpu);
Chia-I Wu763a7492015-10-26 20:48:51 +0800259 disp->GetPhysicalDeviceQueueFamilyProperties(gpu, pQueueFamilyPropertyCount, pQueueProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600260}
261
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800262LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Tony Barbour426b9052015-06-24 16:06:58 -0600263 VkPhysicalDevice gpu,
264 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
265{
266 const VkLayerInstanceDispatchTable *disp;
Tony Barbour426b9052015-06-24 16:06:58 -0600267
268 disp = loader_get_instance_dispatch(gpu);
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600269 disp->GetPhysicalDeviceMemoryProperties(gpu, pMemoryProperties);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600270}
271
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800272LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600273 VkPhysicalDevice gpu,
274 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +0800275 const VkAllocationCallbacks* pAllocator,
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600276 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600277{
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600278 VkResult res;
279
Jon Ashburnb40f2562015-05-29 13:15:39 -0600280 loader_platform_thread_lock_mutex(&loader_lock);
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600281
Chia-I Wu69f40122015-10-26 21:10:41 +0800282 res = loader_CreateDevice(gpu, pCreateInfo, pAllocator, pDevice);
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600283
Jon Ashburnb40f2562015-05-29 13:15:39 -0600284 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600285 return res;
286}
287
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800288LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600289{
290 const VkLayerDispatchTable *disp;
Jon Ashburne58f1a32015-08-28 13:38:21 -0600291 struct loader_device *dev;
292 struct loader_icd *icd = loader_get_icd_and_device(device, &dev);
293 const struct loader_instance *inst = icd->this_instance;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600294 disp = loader_get_dispatch(device);
295
Jon Ashburnb40f2562015-05-29 13:15:39 -0600296 loader_platform_thread_lock_mutex(&loader_lock);
Chia-I Wu69f40122015-10-26 21:10:41 +0800297 disp->DestroyDevice(device, pAllocator);
Jon Ashburne58f1a32015-08-28 13:38:21 -0600298 loader_remove_logical_device(inst, device);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600299 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600300}
301
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800302LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600303 VkPhysicalDevice physicalDevice,
304 const char* pLayerName,
Chia-I Wu763a7492015-10-26 20:48:51 +0800305 uint32_t* pPropertyCount,
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600306 VkExtensionProperties* pProperties)
Jon Ashburnb40f2562015-05-29 13:15:39 -0600307{
308 VkResult res;
309
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600310 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburndb5a5bc2015-11-02 17:40:01 -0700311
312 /* If pLayerName == NULL, then querying ICD extensions, pass this call
313 down the instance chain which will terminate in the ICD. This allows
314 layers to filter the extensions coming back up the chain.
315 If pLayerName != NULL then get layer extensions from manifest file. */
316 if (pLayerName == NULL || strlen(pLayerName) == 0) {
317 const VkLayerInstanceDispatchTable *disp;
318
319 disp = loader_get_instance_dispatch(physicalDevice);
320 res = disp->EnumerateDeviceExtensionProperties(physicalDevice, NULL, pPropertyCount, pProperties);
321 } else {
322 res = loader_EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pPropertyCount, pProperties);
323 }
324
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600325 loader_platform_thread_unlock_mutex(&loader_lock);
Tony Barbour426b9052015-06-24 16:06:58 -0600326 return res;
327}
328
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800329LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600330 VkPhysicalDevice physicalDevice,
Chia-I Wu763a7492015-10-26 20:48:51 +0800331 uint32_t* pPropertyCount,
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600332 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600333{
334 VkResult res;
335
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600336 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburndb5a5bc2015-11-02 17:40:01 -0700337
338 /* Don't dispatch this call down the instance chain, want all device layers
339 enumerated and instance chain may not contain all device layers */
Chia-I Wu763a7492015-10-26 20:48:51 +0800340 res = loader_EnumerateDeviceLayerProperties(physicalDevice, pPropertyCount, pProperties);
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600341 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600342 return res;
343}
344
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800345LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600346{
347 const VkLayerDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600348
349 disp = loader_get_dispatch(device);
350
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600351 disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
352 loader_set_dispatch(*pQueue, disp);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600353}
354
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800355LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600356{
357 const VkLayerDispatchTable *disp;
358
359 disp = loader_get_dispatch(queue);
360
Chia-I Wu483e7702015-10-26 17:20:32 +0800361 return disp->QueueSubmit(queue, submitCount, pSubmits, fence);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600362}
363
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800364LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(VkQueue queue)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600365{
366 const VkLayerDispatchTable *disp;
367
368 disp = loader_get_dispatch(queue);
369
370 return disp->QueueWaitIdle(queue);
371}
372
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800373LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(VkDevice device)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600374{
375 const VkLayerDispatchTable *disp;
376
377 disp = loader_get_dispatch(device);
378
379 return disp->DeviceWaitIdle(device);
380}
381
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800382LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600383{
384 const VkLayerDispatchTable *disp;
385
386 disp = loader_get_dispatch(device);
387
Chia-I Wu1f851912015-10-27 18:04:07 +0800388 return disp->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600389}
390
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800391LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkFreeMemory(VkDevice device, VkDeviceMemory mem, const VkAllocationCallbacks* pAllocator)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600392{
393 const VkLayerDispatchTable *disp;
394
395 disp = loader_get_dispatch(device);
396
Chia-I Wu69f40122015-10-26 21:10:41 +0800397 disp->FreeMemory(device, mem, pAllocator);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600398}
399
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800400LOADER_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 -0600401{
402 const VkLayerDispatchTable *disp;
403
404 disp = loader_get_dispatch(device);
405
406 return disp->MapMemory(device, mem, offset, size, flags, ppData);
407}
408
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800409LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600410{
411 const VkLayerDispatchTable *disp;
412
413 disp = loader_get_dispatch(device);
414
Mark Lobodzinski67b42b72015-09-07 13:59:43 -0600415 disp->UnmapMemory(device, mem);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600416}
417
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800418LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600419{
420 const VkLayerDispatchTable *disp;
421
422 disp = loader_get_dispatch(device);
423
Chia-I Wu1f851912015-10-27 18:04:07 +0800424 return disp->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600425}
426
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800427LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600428{
429 const VkLayerDispatchTable *disp;
430
431 disp = loader_get_dispatch(device);
432
Chia-I Wu1f851912015-10-27 18:04:07 +0800433 return disp->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600434}
435
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800436LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -0600437{
438 const VkLayerDispatchTable *disp;
439
440 disp = loader_get_dispatch(device);
441
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600442 disp->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -0600443}
444
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800445LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600446{
447 const VkLayerDispatchTable *disp;
448
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500449 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600450
Tony Barbourde4124d2015-07-03 10:33:54 -0600451 return disp->BindBufferMemory(device, buffer, mem, offset);
452}
453
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800454LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize offset)
Tony Barbourde4124d2015-07-03 10:33:54 -0600455{
456 const VkLayerDispatchTable *disp;
457
458 disp = loader_get_dispatch(device);
459
460 return disp->BindImageMemory(device, image, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600461}
462
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800463LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn4e189562015-07-23 18:49:07 -0600464{
465 const VkLayerDispatchTable *disp;
466
467 disp = loader_get_dispatch(device);
468
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600469 disp->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jon Ashburn4e189562015-07-23 18:49:07 -0600470}
471
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800472LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn4e189562015-07-23 18:49:07 -0600473{
474 const VkLayerDispatchTable *disp;
475
476 disp = loader_get_dispatch(device);
477
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600478 disp->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jon Ashburn4e189562015-07-23 18:49:07 -0600479}
480
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800481LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600482{
483 const VkLayerDispatchTable *disp;
484
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600485 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600486
Chia-I Wu763a7492015-10-26 20:48:51 +0800487 disp->GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600488}
489
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800490LOADER_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 -0600491{
492 const VkLayerInstanceDispatchTable *disp;
493
494 disp = loader_get_instance_dispatch(physicalDevice);
495
Chia-I Wu763a7492015-10-26 20:48:51 +0800496 disp->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600497}
498
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800499LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -0600500{
501 const VkLayerDispatchTable *disp;
502
503 disp = loader_get_dispatch(queue);
504
Chia-I Wu06809d52015-10-26 16:55:27 +0800505 return disp->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600506}
507
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800508LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600509{
510 const VkLayerDispatchTable *disp;
511
512 disp = loader_get_dispatch(device);
513
Chia-I Wu69f40122015-10-26 21:10:41 +0800514 return disp->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600515}
516
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800517LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600518{
519 const VkLayerDispatchTable *disp;
520
521 disp = loader_get_dispatch(device);
522
Chia-I Wu69f40122015-10-26 21:10:41 +0800523 disp->DestroyFence(device, fence, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600524}
525
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800526LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600527{
528 const VkLayerDispatchTable *disp;
529
530 disp = loader_get_dispatch(device);
531
532 return disp->ResetFences(device, fenceCount, pFences);
533}
534
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800535LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(VkDevice device, VkFence fence)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600536{
537 const VkLayerDispatchTable *disp;
538
539 disp = loader_get_dispatch(device);
540
541 return disp->GetFenceStatus(device, fence);
542}
543
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800544LOADER_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 -0600545{
546 const VkLayerDispatchTable *disp;
547
548 disp = loader_get_dispatch(device);
549
550 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
551}
552
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800553LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600554{
555 const VkLayerDispatchTable *disp;
556
557 disp = loader_get_dispatch(device);
558
Chia-I Wu69f40122015-10-26 21:10:41 +0800559 return disp->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600560}
561
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800562LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600563{
564 const VkLayerDispatchTable *disp;
565
566 disp = loader_get_dispatch(device);
567
Chia-I Wu69f40122015-10-26 21:10:41 +0800568 disp->DestroySemaphore(device, semaphore, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600569}
570
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800571LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600572{
573 const VkLayerDispatchTable *disp;
574
575 disp = loader_get_dispatch(device);
576
Chia-I Wu69f40122015-10-26 21:10:41 +0800577 return disp->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600578}
579
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800580LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600581{
582 const VkLayerDispatchTable *disp;
583
584 disp = loader_get_dispatch(device);
585
Chia-I Wu69f40122015-10-26 21:10:41 +0800586 disp->DestroyEvent(device, event, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600587}
588
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800589LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(VkDevice device, VkEvent event)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600590{
591 const VkLayerDispatchTable *disp;
592
593 disp = loader_get_dispatch(device);
594
595 return disp->GetEventStatus(device, event);
596}
597
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800598LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(VkDevice device, VkEvent event)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600599{
600 const VkLayerDispatchTable *disp;
601
602 disp = loader_get_dispatch(device);
603
604 return disp->SetEvent(device, event);
605}
606
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800607LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(VkDevice device, VkEvent event)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600608{
609 const VkLayerDispatchTable *disp;
610
611 disp = loader_get_dispatch(device);
612
613 return disp->ResetEvent(device, event);
614}
615
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800616LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600617{
618 const VkLayerDispatchTable *disp;
619
620 disp = loader_get_dispatch(device);
621
Chia-I Wu69f40122015-10-26 21:10:41 +0800622 return disp->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600623}
624
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800625LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600626{
627 const VkLayerDispatchTable *disp;
628
629 disp = loader_get_dispatch(device);
630
Chia-I Wu69f40122015-10-26 21:10:41 +0800631 disp->DestroyQueryPool(device, queryPool, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600632}
633
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800634LOADER_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 -0600635{
636 const VkLayerDispatchTable *disp;
637
638 disp = loader_get_dispatch(device);
639
Chia-I Wu1f6942d2015-10-26 18:36:20 +0800640 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600641}
642
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800643LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600644{
645 const VkLayerDispatchTable *disp;
646
647 disp = loader_get_dispatch(device);
648
Chia-I Wu69f40122015-10-26 21:10:41 +0800649 return disp->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600650}
651
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800652LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600653{
654 const VkLayerDispatchTable *disp;
655
656 disp = loader_get_dispatch(device);
657
Chia-I Wu69f40122015-10-26 21:10:41 +0800658 disp->DestroyBuffer(device, buffer, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600659}
660
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800661LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600662{
663 const VkLayerDispatchTable *disp;
664
665 disp = loader_get_dispatch(device);
666
Chia-I Wu69f40122015-10-26 21:10:41 +0800667 return disp->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600668}
669
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800670LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600671{
672 const VkLayerDispatchTable *disp;
673
674 disp = loader_get_dispatch(device);
675
Chia-I Wu69f40122015-10-26 21:10:41 +0800676 disp->DestroyBufferView(device, bufferView, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600677}
678
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800679LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600680{
681 const VkLayerDispatchTable *disp;
682
683 disp = loader_get_dispatch(device);
684
Chia-I Wu69f40122015-10-26 21:10:41 +0800685 return disp->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600686}
687
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800688LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600689{
690 const VkLayerDispatchTable *disp;
691
692 disp = loader_get_dispatch(device);
693
Chia-I Wu69f40122015-10-26 21:10:41 +0800694 disp->DestroyImage(device, image, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600695}
696
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800697LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600698{
699 const VkLayerDispatchTable *disp;
700
701 disp = loader_get_dispatch(device);
702
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600703 disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600704}
705
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800706LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600707{
708 const VkLayerDispatchTable *disp;
709
710 disp = loader_get_dispatch(device);
711
Chia-I Wu69f40122015-10-26 21:10:41 +0800712 return disp->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600713}
714
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800715LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600716{
717 const VkLayerDispatchTable *disp;
718
719 disp = loader_get_dispatch(device);
720
Chia-I Wu69f40122015-10-26 21:10:41 +0800721 disp->DestroyImageView(device, imageView, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600722}
723
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800724LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShader)
Courtney Goeltzenleuchter0b29b0d2015-06-24 18:24:19 -0600725{
726 const VkLayerDispatchTable *disp;
727
728 disp = loader_get_dispatch(device);
729
Chia-I Wu69f40122015-10-26 21:10:41 +0800730 return disp->CreateShaderModule(device, pCreateInfo, pAllocator, pShader);
Courtney Goeltzenleuchter0b29b0d2015-06-24 18:24:19 -0600731}
732
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800733LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600734{
735 const VkLayerDispatchTable *disp;
736
737 disp = loader_get_dispatch(device);
738
Chia-I Wu69f40122015-10-26 21:10:41 +0800739 disp->DestroyShaderModule(device, shaderModule, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600740}
741
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800742LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600743{
744 const VkLayerDispatchTable *disp;
745
746 disp = loader_get_dispatch(device);
747
Chia-I Wu69f40122015-10-26 21:10:41 +0800748 return disp->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600749}
750
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800751LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600752{
753 const VkLayerDispatchTable *disp;
754
755 disp = loader_get_dispatch(device);
756
Chia-I Wu69f40122015-10-26 21:10:41 +0800757 disp->DestroyPipelineCache(device, pipelineCache, pAllocator);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600758}
759
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800760LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600761{
762 const VkLayerDispatchTable *disp;
763
764 disp = loader_get_dispatch(device);
765
Chia-I Wu28c3c432015-10-26 19:17:06 +0800766 return disp->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600767}
768
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800769LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600770{
771 const VkLayerDispatchTable *disp;
772
773 disp = loader_get_dispatch(device);
774
Chia-I Wu1f851912015-10-27 18:04:07 +0800775 return disp->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600776}
777
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800778LOADER_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 -0600779{
780 const VkLayerDispatchTable *disp;
781
782 disp = loader_get_dispatch(device);
783
Chia-I Wu69f40122015-10-26 21:10:41 +0800784 return disp->CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
Jon Ashburn0d60d272015-07-09 15:02:25 -0600785}
786
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800787LOADER_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 -0600788{
789 const VkLayerDispatchTable *disp;
790
791 disp = loader_get_dispatch(device);
792
Chia-I Wu69f40122015-10-26 21:10:41 +0800793 return disp->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600794}
795
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800796LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600797{
798 const VkLayerDispatchTable *disp;
799
800 disp = loader_get_dispatch(device);
801
Chia-I Wu69f40122015-10-26 21:10:41 +0800802 disp->DestroyPipeline(device, pipeline, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600803}
804
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800805LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600806{
807 const VkLayerDispatchTable *disp;
808
809 disp = loader_get_dispatch(device);
810
Chia-I Wu69f40122015-10-26 21:10:41 +0800811 return disp->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600812}
813
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800814LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600815{
816 const VkLayerDispatchTable *disp;
817
818 disp = loader_get_dispatch(device);
819
Chia-I Wu69f40122015-10-26 21:10:41 +0800820 disp->DestroyPipelineLayout(device, pipelineLayout, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600821}
822
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800823LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600824{
825 const VkLayerDispatchTable *disp;
826
827 disp = loader_get_dispatch(device);
828
Chia-I Wu69f40122015-10-26 21:10:41 +0800829 return disp->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600830}
831
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800832LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600833{
834 const VkLayerDispatchTable *disp;
835
836 disp = loader_get_dispatch(device);
837
Chia-I Wu69f40122015-10-26 21:10:41 +0800838 disp->DestroySampler(device, sampler, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600839}
840
841
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800842LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600843{
844 const VkLayerDispatchTable *disp;
845
846 disp = loader_get_dispatch(device);
847
Chia-I Wu69f40122015-10-26 21:10:41 +0800848 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600849}
850
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800851LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600852{
853 const VkLayerDispatchTable *disp;
854
855 disp = loader_get_dispatch(device);
856
Chia-I Wu69f40122015-10-26 21:10:41 +0800857 disp->DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600858}
859
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800860LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600861{
862 const VkLayerDispatchTable *disp;
863
864 disp = loader_get_dispatch(device);
865
Chia-I Wu69f40122015-10-26 21:10:41 +0800866 return disp->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600867}
868
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800869LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator)
Tony Barbourde4124d2015-07-03 10:33:54 -0600870{
871 const VkLayerDispatchTable *disp;
872
873 disp = loader_get_dispatch(device);
874
Chia-I Wu69f40122015-10-26 21:10:41 +0800875 disp->DestroyDescriptorPool(device, descriptorPool, pAllocator);
Tony Barbourde4124d2015-07-03 10:33:54 -0600876}
877
878
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800879LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600880{
881 const VkLayerDispatchTable *disp;
882
883 disp = loader_get_dispatch(device);
884
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -0600885 return disp->ResetDescriptorPool(device, descriptorPool, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600886}
887
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800888LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600889{
890 const VkLayerDispatchTable *disp;
891
892 disp = loader_get_dispatch(device);
893
Chia-I Wu1f851912015-10-27 18:04:07 +0800894 return disp->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600895}
896
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800897LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets)
Tony Barbourb857d312015-07-10 10:50:45 -0600898{
899 const VkLayerDispatchTable *disp;
900
901 disp = loader_get_dispatch(device);
902
Chia-I Wu763a7492015-10-26 20:48:51 +0800903 return disp->FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
Tony Barbourb857d312015-07-10 10:50:45 -0600904}
905
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800906LOADER_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 -0600907{
908 const VkLayerDispatchTable *disp;
909
910 disp = loader_get_dispatch(device);
911
Chia-I Wu483e7702015-10-26 17:20:32 +0800912 disp->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600913}
914
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800915LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer)
Jon Ashburn4e189562015-07-23 18:49:07 -0600916{
917 const VkLayerDispatchTable *disp;
918
919 disp = loader_get_dispatch(device);
920
Chia-I Wu69f40122015-10-26 21:10:41 +0800921 return disp->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jon Ashburn4e189562015-07-23 18:49:07 -0600922}
923
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800924LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator)
Jon Ashburn4e189562015-07-23 18:49:07 -0600925{
926 const VkLayerDispatchTable *disp;
927
928 disp = loader_get_dispatch(device);
929
Chia-I Wu69f40122015-10-26 21:10:41 +0800930 disp->DestroyFramebuffer(device, framebuffer, pAllocator);
Jon Ashburn4e189562015-07-23 18:49:07 -0600931}
932
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800933LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass)
Jon Ashburn4e189562015-07-23 18:49:07 -0600934{
935 const VkLayerDispatchTable *disp;
936
937 disp = loader_get_dispatch(device);
938
Chia-I Wu69f40122015-10-26 21:10:41 +0800939 return disp->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jon Ashburn4e189562015-07-23 18:49:07 -0600940}
941
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800942LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator)
Jon Ashburn4e189562015-07-23 18:49:07 -0600943{
944 const VkLayerDispatchTable *disp;
945
946 disp = loader_get_dispatch(device);
947
Chia-I Wu69f40122015-10-26 21:10:41 +0800948 disp->DestroyRenderPass(device, renderPass, pAllocator);
Jon Ashburn4e189562015-07-23 18:49:07 -0600949}
950
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800951LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity)
Jon Ashburn4e189562015-07-23 18:49:07 -0600952{
953 const VkLayerDispatchTable *disp;
954
955 disp = loader_get_dispatch(device);
956
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -0600957 disp->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jon Ashburn4e189562015-07-23 18:49:07 -0600958}
959
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800960LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool)
Cody Northropf02f9f82015-07-09 18:08:05 -0600961{
962 const VkLayerDispatchTable *disp;
963
964 disp = loader_get_dispatch(device);
965
Chia-I Wu1f851912015-10-27 18:04:07 +0800966 return disp->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Cody Northropf02f9f82015-07-09 18:08:05 -0600967}
968
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800969LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator)
Cody Northropf02f9f82015-07-09 18:08:05 -0600970{
971 const VkLayerDispatchTable *disp;
972
973 disp = loader_get_dispatch(device);
974
Chia-I Wu1f851912015-10-27 18:04:07 +0800975 disp->DestroyCommandPool(device, commandPool, pAllocator);
Cody Northropf02f9f82015-07-09 18:08:05 -0600976}
977
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800978LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags)
Cody Northropf02f9f82015-07-09 18:08:05 -0600979{
980 const VkLayerDispatchTable *disp;
981
982 disp = loader_get_dispatch(device);
983
Chia-I Wu1f851912015-10-27 18:04:07 +0800984 return disp->ResetCommandPool(device, commandPool, flags);
Cody Northropf02f9f82015-07-09 18:08:05 -0600985}
986
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800987LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -0600988 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +0800989 const VkCommandBufferAllocateInfo* pAllocateInfo,
990 VkCommandBuffer* pCommandBuffers)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600991{
992 const VkLayerDispatchTable *disp;
993 VkResult res;
994
995 disp = loader_get_dispatch(device);
996
Chia-I Wu1f851912015-10-27 18:04:07 +0800997 res = disp->AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600998 if (res == VK_SUCCESS) {
Chia-I Wu1f851912015-10-27 18:04:07 +0800999 for (uint32_t i =0; i < pAllocateInfo->bufferCount; i++) {
1000 if (pCommandBuffers[i]) {
1001 loader_init_dispatch(pCommandBuffers[i], disp);
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06001002 }
1003 }
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001004 }
1005
1006 return res;
1007}
1008
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001009LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06001010 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08001011 VkCommandPool commandPool,
Chia-I Wu763a7492015-10-26 20:48:51 +08001012 uint32_t commandBufferCount,
Chia-I Wu1f851912015-10-27 18:04:07 +08001013 const VkCommandBuffer* pCommandBuffers)
Tony Barbourde4124d2015-07-03 10:33:54 -06001014{
1015 const VkLayerDispatchTable *disp;
1016
1017 disp = loader_get_dispatch(device);
1018
Chia-I Wu1f851912015-10-27 18:04:07 +08001019 disp->FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
Tony Barbourde4124d2015-07-03 10:33:54 -06001020}
1021
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001022LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001023{
1024 const VkLayerDispatchTable *disp;
1025
Chia-I Wu1f851912015-10-27 18:04:07 +08001026 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001027
Chia-I Wu1f851912015-10-27 18:04:07 +08001028 return disp->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001029}
1030
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001031LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(VkCommandBuffer commandBuffer)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001032{
1033 const VkLayerDispatchTable *disp;
1034
Chia-I Wu1f851912015-10-27 18:04:07 +08001035 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001036
Chia-I Wu1f851912015-10-27 18:04:07 +08001037 return disp->EndCommandBuffer(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001038}
1039
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001040LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001041{
1042 const VkLayerDispatchTable *disp;
1043
Chia-I Wu1f851912015-10-27 18:04:07 +08001044 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001045
Chia-I Wu1f851912015-10-27 18:04:07 +08001046 return disp->ResetCommandBuffer(commandBuffer, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001047}
1048
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001049LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001050{
1051 const VkLayerDispatchTable *disp;
1052
Chia-I Wu1f851912015-10-27 18:04:07 +08001053 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001054
Chia-I Wu1f851912015-10-27 18:04:07 +08001055 disp->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001056}
1057
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001058LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001059{
1060 const VkLayerDispatchTable *disp;
1061
Chia-I Wu1f851912015-10-27 18:04:07 +08001062 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001063
Chia-I Wu1f851912015-10-27 18:04:07 +08001064 disp->CmdSetViewport(commandBuffer, viewportCount, pViewports);
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06001065}
1066
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001067LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06001068{
1069 const VkLayerDispatchTable *disp;
1070
Chia-I Wu1f851912015-10-27 18:04:07 +08001071 disp = loader_get_dispatch(commandBuffer);
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06001072
Chia-I Wu1f851912015-10-27 18:04:07 +08001073 disp->CmdSetScissor(commandBuffer, scissorCount, pScissors);
Tony Barbourde4124d2015-07-03 10:33:54 -06001074}
1075
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001076LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Tony Barbourde4124d2015-07-03 10:33:54 -06001077{
1078 const VkLayerDispatchTable *disp;
1079
Chia-I Wu1f851912015-10-27 18:04:07 +08001080 disp = loader_get_dispatch(commandBuffer);
Tony Barbourde4124d2015-07-03 10:33:54 -06001081
Chia-I Wu1f851912015-10-27 18:04:07 +08001082 disp->CmdSetLineWidth(commandBuffer, lineWidth);
Cody Northropf5bd2252015-08-17 11:10:49 -06001083}
1084
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001085LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Cody Northropf5bd2252015-08-17 11:10:49 -06001086{
1087 const VkLayerDispatchTable *disp;
1088
Chia-I Wu1f851912015-10-27 18:04:07 +08001089 disp = loader_get_dispatch(commandBuffer);
Cody Northropf5bd2252015-08-17 11:10:49 -06001090
Chia-I Wu1f851912015-10-27 18:04:07 +08001091 disp->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Tony Barbourde4124d2015-07-03 10:33:54 -06001092}
1093
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001094LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Tony Barbourde4124d2015-07-03 10:33:54 -06001095{
1096 const VkLayerDispatchTable *disp;
1097
Chia-I Wu1f851912015-10-27 18:04:07 +08001098 disp = loader_get_dispatch(commandBuffer);
Tony Barbourde4124d2015-07-03 10:33:54 -06001099
Chia-I Wu1f851912015-10-27 18:04:07 +08001100 disp->CmdSetBlendConstants(commandBuffer, blendConstants);
Tony Barbourde4124d2015-07-03 10:33:54 -06001101}
1102
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001103LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Tony Barbourde4124d2015-07-03 10:33:54 -06001104{
1105 const VkLayerDispatchTable *disp;
1106
Chia-I Wu1f851912015-10-27 18:04:07 +08001107 disp = loader_get_dispatch(commandBuffer);
Tony Barbourde4124d2015-07-03 10:33:54 -06001108
Chia-I Wu1f851912015-10-27 18:04:07 +08001109 disp->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop2605cb02015-08-18 15:21:16 -06001110}
1111
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001112LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop2605cb02015-08-18 15:21:16 -06001113{
1114 const VkLayerDispatchTable *disp;
1115
Chia-I Wu1f851912015-10-27 18:04:07 +08001116 disp = loader_get_dispatch(commandBuffer);
Cody Northrop2605cb02015-08-18 15:21:16 -06001117
Chia-I Wuc51b1212015-10-27 19:25:11 +08001118 disp->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001119}
1120
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001121LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001122{
1123 const VkLayerDispatchTable *disp;
1124
Chia-I Wu1f851912015-10-27 18:04:07 +08001125 disp = loader_get_dispatch(commandBuffer);
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001126
Chia-I Wuc51b1212015-10-27 19:25:11 +08001127 disp->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001128}
1129
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001130LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001131{
1132 const VkLayerDispatchTable *disp;
1133
Chia-I Wu1f851912015-10-27 18:04:07 +08001134 disp = loader_get_dispatch(commandBuffer);
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06001135
Chia-I Wuc51b1212015-10-27 19:25:11 +08001136 disp->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001137}
1138
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001139LOADER_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 -06001140{
1141 const VkLayerDispatchTable *disp;
1142
Chia-I Wu1f851912015-10-27 18:04:07 +08001143 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001144
Chia-I Wu1f851912015-10-27 18:04:07 +08001145 disp->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001146}
1147
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001148LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001149{
1150 const VkLayerDispatchTable *disp;
1151
Chia-I Wu1f851912015-10-27 18:04:07 +08001152 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001153
Chia-I Wu1f851912015-10-27 18:04:07 +08001154 disp->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001155}
1156
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001157LOADER_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 -06001158{
1159 const VkLayerDispatchTable *disp;
1160
Chia-I Wu1f851912015-10-27 18:04:07 +08001161 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn4e189562015-07-23 18:49:07 -06001162
Chia-I Wu1f851912015-10-27 18:04:07 +08001163 disp->CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
Jon Ashburn4e189562015-07-23 18:49:07 -06001164}
1165
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001166LOADER_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 -06001167{
1168 const VkLayerDispatchTable *disp;
1169
Chia-I Wu1f851912015-10-27 18:04:07 +08001170 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001171
Chia-I Wu1f851912015-10-27 18:04:07 +08001172 disp->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001173}
1174
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001175LOADER_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 -06001176{
1177 const VkLayerDispatchTable *disp;
1178
Chia-I Wu1f851912015-10-27 18:04:07 +08001179 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001180
Chia-I Wu1f851912015-10-27 18:04:07 +08001181 disp->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001182}
1183
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001184LOADER_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 -06001185{
1186 const VkLayerDispatchTable *disp;
1187
Chia-I Wu1f851912015-10-27 18:04:07 +08001188 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001189
Chia-I Wu1f851912015-10-27 18:04:07 +08001190 disp->CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001191}
1192
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001193LOADER_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 -06001194{
1195 const VkLayerDispatchTable *disp;
1196
Chia-I Wu1f851912015-10-27 18:04:07 +08001197 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001198
Chia-I Wu1f851912015-10-27 18:04:07 +08001199 disp->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001200}
1201
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001202LOADER_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 -06001203{
1204 const VkLayerDispatchTable *disp;
1205
Chia-I Wu1f851912015-10-27 18:04:07 +08001206 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001207
Chia-I Wu1f851912015-10-27 18:04:07 +08001208 disp->CmdDispatch(commandBuffer, x, y, z);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001209}
1210
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001211LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001212{
1213 const VkLayerDispatchTable *disp;
1214
Chia-I Wu1f851912015-10-27 18:04:07 +08001215 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001216
Chia-I Wu1f851912015-10-27 18:04:07 +08001217 disp->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001218}
1219
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001220LOADER_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 -06001221{
1222 const VkLayerDispatchTable *disp;
1223
Chia-I Wu1f851912015-10-27 18:04:07 +08001224 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001225
Chia-I Wu1f851912015-10-27 18:04:07 +08001226 disp->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001227}
1228
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001229LOADER_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 -06001230{
1231 const VkLayerDispatchTable *disp;
1232
Chia-I Wu1f851912015-10-27 18:04:07 +08001233 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001234
Chia-I Wu1f851912015-10-27 18:04:07 +08001235 disp->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001236}
1237
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001238LOADER_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 -06001239{
1240 const VkLayerDispatchTable *disp;
1241
Chia-I Wu1f851912015-10-27 18:04:07 +08001242 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001243
Chia-I Wu1f851912015-10-27 18:04:07 +08001244 disp->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001245}
1246
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001247LOADER_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 -06001248{
1249 const VkLayerDispatchTable *disp;
1250
Chia-I Wu1f851912015-10-27 18:04:07 +08001251 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001252
Chia-I Wu1f851912015-10-27 18:04:07 +08001253 disp->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001254}
1255
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001256LOADER_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 -06001257{
1258 const VkLayerDispatchTable *disp;
1259
Chia-I Wu1f851912015-10-27 18:04:07 +08001260 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001261
Chia-I Wu1f851912015-10-27 18:04:07 +08001262 disp->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001263}
1264
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001265LOADER_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 -06001266{
1267 const VkLayerDispatchTable *disp;
1268
Chia-I Wu1f851912015-10-27 18:04:07 +08001269 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001270
Chia-I Wu1f851912015-10-27 18:04:07 +08001271 disp->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001272}
1273
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001274LOADER_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 -06001275{
1276 const VkLayerDispatchTable *disp;
1277
Chia-I Wu1f851912015-10-27 18:04:07 +08001278 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001279
Chia-I Wu1f851912015-10-27 18:04:07 +08001280 disp->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001281}
1282
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001283LOADER_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 -06001284{
1285 const VkLayerDispatchTable *disp;
1286
Chia-I Wu1f851912015-10-27 18:04:07 +08001287 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001288
Chia-I Wu1f851912015-10-27 18:04:07 +08001289 disp->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001290}
1291
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001292LOADER_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 -06001293{
1294 const VkLayerDispatchTable *disp;
1295
Chia-I Wu1f851912015-10-27 18:04:07 +08001296 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001297
Chia-I Wu1f851912015-10-27 18:04:07 +08001298 disp->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Chris Forbes2951d7d2015-06-22 17:21:59 +12001299}
1300
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001301LOADER_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 +12001302{
1303 const VkLayerDispatchTable *disp;
1304
Chia-I Wu1f851912015-10-27 18:04:07 +08001305 disp = loader_get_dispatch(commandBuffer);
Chris Forbes2951d7d2015-06-22 17:21:59 +12001306
Chia-I Wu1f851912015-10-27 18:04:07 +08001307 disp->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001308}
1309
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001310LOADER_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 -06001311{
1312 const VkLayerDispatchTable *disp;
1313
Chia-I Wu1f851912015-10-27 18:04:07 +08001314 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001315
Chia-I Wu1f851912015-10-27 18:04:07 +08001316 disp->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001317}
1318
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001319LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001320{
1321 const VkLayerDispatchTable *disp;
1322
Chia-I Wu1f851912015-10-27 18:04:07 +08001323 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001324
Chia-I Wu1f851912015-10-27 18:04:07 +08001325 disp->CmdSetEvent(commandBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001326}
1327
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001328LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001329{
1330 const VkLayerDispatchTable *disp;
1331
Chia-I Wu1f851912015-10-27 18:04:07 +08001332 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001333
Chia-I Wu1f851912015-10-27 18:04:07 +08001334 disp->CmdResetEvent(commandBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001335}
1336
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001337LOADER_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 -06001338{
1339 const VkLayerDispatchTable *disp;
1340
Chia-I Wu1f851912015-10-27 18:04:07 +08001341 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001342
Chia-I Wu1f851912015-10-27 18:04:07 +08001343 disp->CmdWaitEvents(commandBuffer, eventCount, pEvents, sourceStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001344}
1345
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001346LOADER_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 -06001347{
1348 const VkLayerDispatchTable *disp;
1349
Chia-I Wu1f851912015-10-27 18:04:07 +08001350 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001351
Chia-I Wu1f851912015-10-27 18:04:07 +08001352 disp->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001353}
1354
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001355LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001356{
1357 const VkLayerDispatchTable *disp;
1358
Chia-I Wu1f851912015-10-27 18:04:07 +08001359 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001360
Chia-I Wu1f851912015-10-27 18:04:07 +08001361 disp->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001362}
1363
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001364LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001365{
1366 const VkLayerDispatchTable *disp;
1367
Chia-I Wu1f851912015-10-27 18:04:07 +08001368 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001369
Chia-I Wu1f851912015-10-27 18:04:07 +08001370 disp->CmdEndQuery(commandBuffer, queryPool, slot);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001371}
1372
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001373LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001374{
1375 const VkLayerDispatchTable *disp;
1376
Chia-I Wu1f851912015-10-27 18:04:07 +08001377 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001378
Chia-I Wu1f851912015-10-27 18:04:07 +08001379 disp->CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001380}
1381
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001382LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001383{
1384 const VkLayerDispatchTable *disp;
1385
Chia-I Wu1f851912015-10-27 18:04:07 +08001386 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001387
Chia-I Wu1f851912015-10-27 18:04:07 +08001388 disp->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001389}
1390
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001391LOADER_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 -06001392{
1393 const VkLayerDispatchTable *disp;
1394
Chia-I Wu1f851912015-10-27 18:04:07 +08001395 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001396
Chia-I Wu1f851912015-10-27 18:04:07 +08001397 disp->CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001398}
1399
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001400LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001401{
1402 const VkLayerDispatchTable *disp;
1403
Chia-I Wu1f851912015-10-27 18:04:07 +08001404 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001405
Chia-I Wu1f851912015-10-27 18:04:07 +08001406 disp->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, values);
Tony Barbourde4124d2015-07-03 10:33:54 -06001407}
1408
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001409LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001410{
1411 const VkLayerDispatchTable *disp;
1412
Chia-I Wu1f851912015-10-27 18:04:07 +08001413 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001414
Chia-I Wu1f851912015-10-27 18:04:07 +08001415 disp->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Chia-I Wuc278df82015-07-07 11:50:03 +08001416}
1417
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001418LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents)
Chia-I Wuc278df82015-07-07 11:50:03 +08001419{
1420 const VkLayerDispatchTable *disp;
1421
Chia-I Wu1f851912015-10-27 18:04:07 +08001422 disp = loader_get_dispatch(commandBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08001423
Chia-I Wu1f851912015-10-27 18:04:07 +08001424 disp->CmdNextSubpass(commandBuffer, contents);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001425}
1426
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001427LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(VkCommandBuffer commandBuffer)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001428{
1429 const VkLayerDispatchTable *disp;
1430
Chia-I Wu1f851912015-10-27 18:04:07 +08001431 disp = loader_get_dispatch(commandBuffer);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001432
Chia-I Wu1f851912015-10-27 18:04:07 +08001433 disp->CmdEndRenderPass(commandBuffer);
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001434}
1435
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001436LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount, const VkCommandBuffer* pCommandBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001437{
1438 const VkLayerDispatchTable *disp;
1439
Chia-I Wu1f851912015-10-27 18:04:07 +08001440 disp = loader_get_dispatch(commandBuffer);
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001441
Chia-I Wu1f851912015-10-27 18:04:07 +08001442 disp->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001443}