blob: f2239ff00b0da83d8cfe3f9b6f711607598da52e [file] [log] [blame]
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001/*
2 * Vulkan
3 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
Jon Ashburnfce93d92015-05-12 17:26:48 -060024#include <stdlib.h>
25#include <string.h>
Jon Ashburn2139a3e2015-05-06 09:02:10 -060026
Jon Ashburnfce93d92015-05-12 17:26:48 -060027#include "loader_platform.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060028#include "loader.h"
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060029#include "debug_report.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060030
Tobin Ehlis3126f012015-05-13 11:57:18 -060031#if defined(WIN32)
32// On Windows need to disable global optimization for function entrypoints or
33// else mhook will not be able to hook all of them
34#pragma optimize( "g", off )
35#endif
36
Jon Ashburn2139a3e2015-05-06 09:02:10 -060037/* Trampoline entrypoints */
Jon Ashburnfce93d92015-05-12 17:26:48 -060038LOADER_EXPORT VkResult VKAPI vkCreateInstance(
Courtney Goeltzenleuchter70c4ebc2015-06-08 15:13:50 -060039 const VkInstanceCreateInfo* pCreateInfo,
40 VkInstance* pInstance)
Jon Ashburnfce93d92015-05-12 17:26:48 -060041{
42 struct loader_instance *ptr_instance = NULL;
43
44 VkResult res = VK_ERROR_INITIALIZATION_FAILED;
Jon Ashburnfce93d92015-05-12 17:26:48 -060045
46 /* Scan/discover all ICD libraries in a single-threaded manner */
47 loader_platform_thread_once(&once_icd, loader_icd_scan);
48
49 /* get layer libraries in a single-threaded manner */
50 loader_platform_thread_once(&once_layer, layer_lib_scan);
51
52 /* merge any duplicate extensions */
53 loader_platform_thread_once(&once_exts, loader_coalesce_extensions);
54
55 ptr_instance = (struct loader_instance*) malloc(sizeof(struct loader_instance));
56 if (ptr_instance == NULL) {
57 return VK_ERROR_OUT_OF_HOST_MEMORY;
58 }
Jon Ashburnb40f2562015-05-29 13:15:39 -060059 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -060060 memset(ptr_instance, 0, sizeof(struct loader_instance));
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060061 ptr_instance->app_extension_count = pCreateInfo->extensionCount;
62 ptr_instance->app_extension_props = (ptr_instance->app_extension_count > 0) ?
63 malloc(sizeof (VkExtensionProperties) * ptr_instance->app_extension_count) : NULL;
Jon Ashburnb40f2562015-05-29 13:15:39 -060064 if (ptr_instance->app_extension_props == NULL && (ptr_instance->app_extension_count > 0)) {
65 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -060066 return VK_ERROR_OUT_OF_HOST_MEMORY;
Jon Ashburnb40f2562015-05-29 13:15:39 -060067 }
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060068
69 /*
70 * Make local copy of extension properties indicated by application.
71 */
72 if (ptr_instance->app_extension_props) {
73 memcpy(ptr_instance->app_extension_props,
74 pCreateInfo->pEnabledExtensions,
75 sizeof(VkExtensionProperties) * ptr_instance->app_extension_count);
Jon Ashburnfce93d92015-05-12 17:26:48 -060076 }
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060077
Jon Ashburnbfa43b72015-05-19 14:33:18 -060078 ptr_instance->disp = malloc(sizeof(VkLayerInstanceDispatchTable));
Jon Ashburnb40f2562015-05-29 13:15:39 -060079 if (ptr_instance->disp == NULL) {
80 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnbfa43b72015-05-19 14:33:18 -060081 return VK_ERROR_OUT_OF_HOST_MEMORY;
Jon Ashburnb40f2562015-05-29 13:15:39 -060082 }
Jon Ashburnbfa43b72015-05-19 14:33:18 -060083 memcpy(ptr_instance->disp, &instance_disp, sizeof(instance_disp));
Jon Ashburnfce93d92015-05-12 17:26:48 -060084 ptr_instance->next = loader.instances;
85 loader.instances = ptr_instance;
Jon Ashburncedc15f2015-05-21 18:13:33 -060086
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060087 loader_enable_instance_layers(ptr_instance);
88
89 debug_report_create_instance(ptr_instance);
Jon Ashburncedc15f2015-05-21 18:13:33 -060090
91 /* enable any layers on instance chain */
Jon Ashburnfce93d92015-05-12 17:26:48 -060092 loader_activate_instance_layers(ptr_instance);
93
Jon Ashburnfce93d92015-05-12 17:26:48 -060094 *pInstance = (VkInstance) ptr_instance;
Jon Ashburna179dcf2015-05-21 17:42:17 -060095
96 res = ptr_instance->disp->CreateInstance(pCreateInfo, pInstance);
97
Courtney Goeltzenleuchter23b5f8d2015-06-17 20:51:59 -060098 /*
99 * Finally have the layers in place and everyone has seen
100 * the CreateInstance command go by. This allows the layer's
101 * GetInstanceProcAddr functions to return valid extension functions
102 * if enabled.
103 */
104 loader_activate_instance_layer_extensions(ptr_instance);
105
Jon Ashburnb40f2562015-05-29 13:15:39 -0600106 loader_platform_thread_unlock_mutex(&loader_lock);
107
Jon Ashburnfce93d92015-05-12 17:26:48 -0600108 return res;
109}
110
111LOADER_EXPORT VkResult VKAPI vkDestroyInstance(
112 VkInstance instance)
113{
114 const VkLayerInstanceDispatchTable *disp;
Jon Ashburnb40f2562015-05-29 13:15:39 -0600115 VkResult res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600116 disp = loader_get_instance_dispatch(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600117
Jon Ashburnb40f2562015-05-29 13:15:39 -0600118 loader_platform_thread_lock_mutex(&loader_lock);
119
120 res = disp->DestroyInstance(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600121
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600122 struct loader_instance *ptr_instance = loader_instance(instance);
123 loader_deactivate_instance_layers(ptr_instance);
124 loader_destroy_ext_list(&ptr_instance->enabled_instance_extensions);
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600125
126 free(ptr_instance);
127
Jon Ashburnb40f2562015-05-29 13:15:39 -0600128 loader_platform_thread_unlock_mutex(&loader_lock);
129
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600130 return res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600131}
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600132
Jon Ashburnfce93d92015-05-12 17:26:48 -0600133LOADER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
134 VkInstance instance,
135 uint32_t* pPhysicalDeviceCount,
136 VkPhysicalDevice* pPhysicalDevices)
137{
138 const VkLayerInstanceDispatchTable *disp;
Jon Ashburnb40f2562015-05-29 13:15:39 -0600139 VkResult res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600140 disp = loader_get_instance_dispatch(instance);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600141
142 loader_platform_thread_lock_mutex(&loader_lock);
143 res = disp->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount,
Jon Ashburnfce93d92015-05-12 17:26:48 -0600144 pPhysicalDevices);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600145 loader_platform_thread_unlock_mutex(&loader_lock);
146 return res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600147}
148
Tony Barbour426b9052015-06-24 16:06:58 -0600149LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
Jon Ashburnfce93d92015-05-12 17:26:48 -0600150 VkPhysicalDevice gpu,
Tony Barbour426b9052015-06-24 16:06:58 -0600151 VkPhysicalDeviceProperties* pProperties)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600152{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600153 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600154 VkResult res;
155
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600156 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600157 res = disp->GetPhysicalDeviceProperties(gpu, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600158 return res;
159}
160
161LOADER_EXPORT VkResult VKAPI vkGetPhysicalDevicePerformance(
162 VkPhysicalDevice gpu,
163 VkPhysicalDevicePerformance* pPerformance)
164{
165 const VkLayerInstanceDispatchTable *disp;
166 VkResult res;
167
168 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600169 res = disp->GetPhysicalDevicePerformance(gpu, pPerformance);
Tony Barbour426b9052015-06-24 16:06:58 -0600170 return res;
171}
172
173LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueCount(
174 VkPhysicalDevice gpu,
175 uint32_t* pCount)
176{
177 const VkLayerInstanceDispatchTable *disp;
178 VkResult res;
179
180 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600181 res = disp->GetPhysicalDeviceQueueCount(gpu, pCount);
Tony Barbour426b9052015-06-24 16:06:58 -0600182 return res;
183}
184
185LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
186 VkPhysicalDevice gpu,
187 uint32_t count,
188 VkPhysicalDeviceQueueProperties* pQueueProperties)
189{
190 const VkLayerInstanceDispatchTable *disp;
191 VkResult res;
192
193 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600194 res = disp->GetPhysicalDeviceQueueProperties(gpu, count, pQueueProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600195 return res;
196}
197
198LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
199 VkPhysicalDevice gpu,
200 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
201{
202 const VkLayerInstanceDispatchTable *disp;
203 VkResult res;
204
205 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600206 res = disp->GetPhysicalDeviceMemoryProperties(gpu, pMemoryProperties);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600207 return res;
208}
209
Chris Forbesd7576302015-06-21 22:55:02 +1200210LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
211 VkPhysicalDevice gpu,
212 VkPhysicalDeviceFeatures *pFeatures)
213{
214 const VkLayerInstanceDispatchTable *disp;
215 VkResult res;
216
217 disp = loader_get_instance_dispatch(gpu);
Chris Forbesd7576302015-06-21 22:55:02 +1200218 res = disp->GetPhysicalDeviceFeatures(gpu, pFeatures);
Chris Forbesd7576302015-06-21 22:55:02 +1200219 return res;
220}
221
222LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatInfo(
223 VkPhysicalDevice gpu,
224 VkFormat format,
225 VkFormatProperties *pFormatInfo)
226{
227 const VkLayerInstanceDispatchTable *disp;
228 VkResult res;
229
230 disp = loader_get_instance_dispatch(gpu);
Chris Forbesd7576302015-06-21 22:55:02 +1200231 res = disp->GetPhysicalDeviceFormatInfo(gpu, format, pFormatInfo);
Chris Forbesd7576302015-06-21 22:55:02 +1200232 return res;
233}
234
235LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
236 VkPhysicalDevice gpu,
237 VkPhysicalDeviceLimits *pLimits)
238{
239 const VkLayerInstanceDispatchTable *disp;
240 VkResult res;
241
242 disp = loader_get_instance_dispatch(gpu);
Chris Forbesd7576302015-06-21 22:55:02 +1200243 res = disp->GetPhysicalDeviceLimits(gpu, pLimits);
Chris Forbesd7576302015-06-21 22:55:02 +1200244 return res;
245}
246
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600247LOADER_EXPORT VkResult VKAPI vkCreateDevice(
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600248 VkPhysicalDevice gpu,
249 const VkDeviceCreateInfo* pCreateInfo,
250 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600251{
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600252 VkResult res;
253
Jon Ashburnb40f2562015-05-29 13:15:39 -0600254 loader_platform_thread_lock_mutex(&loader_lock);
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600255
256 res = loader_CreateDevice(gpu, pCreateInfo, pDevice);
257
Jon Ashburnb40f2562015-05-29 13:15:39 -0600258 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600259 return res;
260}
261
262LOADER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
263{
264 const VkLayerDispatchTable *disp;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600265 VkResult res;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600266
267 disp = loader_get_dispatch(device);
268
Jon Ashburnb40f2562015-05-29 13:15:39 -0600269 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600270 res = disp->DestroyDevice(device);
Jon Ashburncb5a5ac2015-06-10 10:06:06 -0600271 loader_remove_logical_device(device);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600272 loader_platform_thread_unlock_mutex(&loader_lock);
273 return res;
274}
275
Tony Barbour426b9052015-06-24 16:06:58 -0600276LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Jon Ashburnb40f2562015-05-29 13:15:39 -0600277 VkPhysicalDevice gpu,
Jon Ashburnb40f2562015-05-29 13:15:39 -0600278 uint32_t extensionIndex,
Tony Barbour426b9052015-06-24 16:06:58 -0600279 VkExtensionProperties* pProperties)
Jon Ashburnb40f2562015-05-29 13:15:39 -0600280{
281 VkResult res;
282
Tony Barbour426b9052015-06-24 16:06:58 -0600283 res = loader_GetPhysicalDeviceExtensionProperties(gpu, extensionIndex, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600284 return res;
285}
286
287LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionCount(
288 VkPhysicalDevice gpu,
289 uint32_t* pCount)
290{
291 VkResult res;
292
Tony Barbour426b9052015-06-24 16:06:58 -0600293 res = loader_GetPhysicalDeviceExtensionCount(gpu, pCount);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600294 return res;
295}
296
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600297LOADER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
298{
299 const VkLayerDispatchTable *disp;
300 VkResult res;
301
302 disp = loader_get_dispatch(device);
303
304 res = disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
305 if (res == VK_SUCCESS) {
306 loader_set_dispatch(*pQueue, disp);
307 }
308
309 return res;
310}
311
312LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
313{
314 const VkLayerDispatchTable *disp;
315
316 disp = loader_get_dispatch(queue);
317
318 return disp->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
319}
320
321LOADER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
322{
323 const VkLayerDispatchTable *disp;
324
325 disp = loader_get_dispatch(queue);
326
327 return disp->QueueWaitIdle(queue);
328}
329
330LOADER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
331{
332 const VkLayerDispatchTable *disp;
333
334 disp = loader_get_dispatch(device);
335
336 return disp->DeviceWaitIdle(device);
337}
338
339LOADER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem)
340{
341 const VkLayerDispatchTable *disp;
342
343 disp = loader_get_dispatch(device);
344
345 return disp->AllocMemory(device, pAllocInfo, pMem);
346}
347
348LOADER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
349{
350 const VkLayerDispatchTable *disp;
351
352 disp = loader_get_dispatch(device);
353
354 return disp->FreeMemory(device, mem);
355}
356
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600357LOADER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
358{
359 const VkLayerDispatchTable *disp;
360
361 disp = loader_get_dispatch(device);
362
363 return disp->MapMemory(device, mem, offset, size, flags, ppData);
364}
365
366LOADER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
367{
368 const VkLayerDispatchTable *disp;
369
370 disp = loader_get_dispatch(device);
371
372 return disp->UnmapMemory(device, mem);
373}
374
375LOADER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
376{
377 const VkLayerDispatchTable *disp;
378
379 disp = loader_get_dispatch(device);
380
381 return disp->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
382}
383
384LOADER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
385{
386 const VkLayerDispatchTable *disp;
387
388 disp = loader_get_dispatch(device);
389
390 return disp->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
391}
392
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600393LOADER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
394{
395 const VkLayerDispatchTable *disp;
396
397 disp = loader_get_dispatch(device);
398
399 return disp->DestroyObject(device, objType, object);
400}
401
Tony Barbour426b9052015-06-24 16:06:58 -0600402LOADER_EXPORT VkResult VKAPI vkGetObjectMemoryRequirements(VkDevice device, VkObjectType objType, VkObject object, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600403{
404 const VkLayerDispatchTable *disp;
405
406 disp = loader_get_dispatch(device);
407
Tony Barbour426b9052015-06-24 16:06:58 -0600408 return disp->GetObjectMemoryRequirements(device, objType, object, pMemoryRequirements);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600409}
410
Mark Lobodzinski23182612015-05-29 09:32:35 -0500411LOADER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600412{
413 const VkLayerDispatchTable *disp;
414
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500415 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600416
Mark Lobodzinski23182612015-05-29 09:32:35 -0500417 return disp->BindObjectMemory(device, objType, object, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600418}
419
Mark Lobodzinski23182612015-05-29 09:32:35 -0500420LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600421{
422 const VkLayerDispatchTable *disp;
423
424 disp = loader_get_dispatch(queue);
425
Mark Lobodzinski23182612015-05-29 09:32:35 -0500426 return disp->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600427}
428
Mark Lobodzinski23182612015-05-29 09:32:35 -0500429LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600430{
431 const VkLayerDispatchTable *disp;
432
433 disp = loader_get_dispatch(queue);
434
Mark Lobodzinski23182612015-05-29 09:32:35 -0500435 return disp->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600436}
437
438LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
439{
440 const VkLayerDispatchTable *disp;
441
442 disp = loader_get_dispatch(device);
443
444 return disp->CreateFence(device, pCreateInfo, pFence);
445}
446
Courtney Goeltzenleuchterf2e33ad2015-06-18 17:28:20 -0600447LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600448{
449 const VkLayerDispatchTable *disp;
450
451 disp = loader_get_dispatch(device);
452
453 return disp->ResetFences(device, fenceCount, pFences);
454}
455
456LOADER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
457{
458 const VkLayerDispatchTable *disp;
459
460 disp = loader_get_dispatch(device);
461
462 return disp->GetFenceStatus(device, fence);
463}
464
465LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout)
466{
467 const VkLayerDispatchTable *disp;
468
469 disp = loader_get_dispatch(device);
470
471 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
472}
473
474LOADER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
475{
476 const VkLayerDispatchTable *disp;
477
478 disp = loader_get_dispatch(device);
479
480 return disp->CreateSemaphore(device, pCreateInfo, pSemaphore);
481}
482
483LOADER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
484{
485 const VkLayerDispatchTable *disp;
486
487 disp = loader_get_dispatch(queue);
488
489 return disp->QueueSignalSemaphore(queue, semaphore);
490}
491
492LOADER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
493{
494 const VkLayerDispatchTable *disp;
495
496 disp = loader_get_dispatch(queue);
497
498 return disp->QueueWaitSemaphore(queue, semaphore);
499}
500
501LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
502{
503 const VkLayerDispatchTable *disp;
504
505 disp = loader_get_dispatch(device);
506
507 return disp->CreateEvent(device, pCreateInfo, pEvent);
508}
509
510LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
511{
512 const VkLayerDispatchTable *disp;
513
514 disp = loader_get_dispatch(device);
515
516 return disp->GetEventStatus(device, event);
517}
518
519LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
520{
521 const VkLayerDispatchTable *disp;
522
523 disp = loader_get_dispatch(device);
524
525 return disp->SetEvent(device, event);
526}
527
528LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
529{
530 const VkLayerDispatchTable *disp;
531
532 disp = loader_get_dispatch(device);
533
534 return disp->ResetEvent(device, event);
535}
536
537LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
538{
539 const VkLayerDispatchTable *disp;
540
541 disp = loader_get_dispatch(device);
542
543 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool);
544}
545
546LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
547{
548 const VkLayerDispatchTable *disp;
549
550 disp = loader_get_dispatch(device);
551
552 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
553}
554
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600555LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
556{
557 const VkLayerDispatchTable *disp;
558
559 disp = loader_get_dispatch(device);
560
561 return disp->CreateBuffer(device, pCreateInfo, pBuffer);
562}
563
564LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
565{
566 const VkLayerDispatchTable *disp;
567
568 disp = loader_get_dispatch(device);
569
570 return disp->CreateBufferView(device, pCreateInfo, pView);
571}
572
573LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
574{
575 const VkLayerDispatchTable *disp;
576
577 disp = loader_get_dispatch(device);
578
579 return disp->CreateImage(device, pCreateInfo, pImage);
580}
581
Tony Barbour426b9052015-06-24 16:06:58 -0600582LOADER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600583{
584 const VkLayerDispatchTable *disp;
585
586 disp = loader_get_dispatch(device);
587
Tony Barbour426b9052015-06-24 16:06:58 -0600588 return disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600589}
590
591LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
592{
593 const VkLayerDispatchTable *disp;
594
595 disp = loader_get_dispatch(device);
596
597 return disp->CreateImageView(device, pCreateInfo, pView);
598}
599
600LOADER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
601{
602 const VkLayerDispatchTable *disp;
603
604 disp = loader_get_dispatch(device);
605
606 return disp->CreateColorAttachmentView(device, pCreateInfo, pView);
607}
608
609LOADER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
610{
611 const VkLayerDispatchTable *disp;
612
613 disp = loader_get_dispatch(device);
614
615 return disp->CreateDepthStencilView(device, pCreateInfo, pView);
616}
617
Courtney Goeltzenleuchter0b29b0d2015-06-24 18:24:19 -0600618LOADER_EXPORT VkResult VKAPI vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShader)
619{
620 const VkLayerDispatchTable *disp;
621
622 disp = loader_get_dispatch(device);
623
624 return disp->CreateShaderModule(device, pCreateInfo, pShader);
625}
626
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600627LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
628{
629 const VkLayerDispatchTable *disp;
630
631 disp = loader_get_dispatch(device);
632
633 return disp->CreateShader(device, pCreateInfo, pShader);
634}
635
636LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
637{
638 const VkLayerDispatchTable *disp;
639
640 disp = loader_get_dispatch(device);
641
642 return disp->CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
643}
644
645LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
646{
647 const VkLayerDispatchTable *disp;
648
649 disp = loader_get_dispatch(device);
650
651 return disp->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
652}
653
654LOADER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
655{
656 const VkLayerDispatchTable *disp;
657
658 disp = loader_get_dispatch(device);
659
660 return disp->CreateComputePipeline(device, pCreateInfo, pPipeline);
661}
662
663LOADER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
664{
665 const VkLayerDispatchTable *disp;
666
667 disp = loader_get_dispatch(device);
668
669 return disp->StorePipeline(device, pipeline, pDataSize, pData);
670}
671
672LOADER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
673{
674 const VkLayerDispatchTable *disp;
675
676 disp = loader_get_dispatch(device);
677
678 return disp->LoadPipeline(device, dataSize, pData, pPipeline);
679}
680
681LOADER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
682{
683 const VkLayerDispatchTable *disp;
684
685 disp = loader_get_dispatch(device);
686
687 return disp->LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
688}
689
690LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
691{
692 const VkLayerDispatchTable *disp;
693
694 disp = loader_get_dispatch(device);
695
696 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
697}
698
699LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
700{
701 const VkLayerDispatchTable *disp;
702
703 disp = loader_get_dispatch(device);
704
705 return disp->CreateSampler(device, pCreateInfo, pSampler);
706}
707
708LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
709{
710 const VkLayerDispatchTable *disp;
711
712 disp = loader_get_dispatch(device);
713
714 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
715}
716
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600717LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
718{
719 const VkLayerDispatchTable *disp;
720
721 disp = loader_get_dispatch(device);
722
723 return disp->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
724}
725
726LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
727{
728 const VkLayerDispatchTable *disp;
729
730 disp = loader_get_dispatch(device);
731
732 return disp->ResetDescriptorPool(device, descriptorPool);
733}
734
735LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
736{
737 const VkLayerDispatchTable *disp;
738
739 disp = loader_get_dispatch(device);
740
741 return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
742}
743
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800744LOADER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600745{
746 const VkLayerDispatchTable *disp;
747
748 disp = loader_get_dispatch(device);
749
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800750 return disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600751}
752
753LOADER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
754{
755 const VkLayerDispatchTable *disp;
756
757 disp = loader_get_dispatch(device);
758
759 return disp->CreateDynamicViewportState(device, pCreateInfo, pState);
760}
761
762LOADER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
763{
764 const VkLayerDispatchTable *disp;
765
766 disp = loader_get_dispatch(device);
767
768 return disp->CreateDynamicRasterState(device, pCreateInfo, pState);
769}
770
771LOADER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
772{
773 const VkLayerDispatchTable *disp;
774
775 disp = loader_get_dispatch(device);
776
777 return disp->CreateDynamicColorBlendState(device, pCreateInfo, pState);
778}
779
780LOADER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
781{
782 const VkLayerDispatchTable *disp;
783
784 disp = loader_get_dispatch(device);
785
786 return disp->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
787}
788
789LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
790{
791 const VkLayerDispatchTable *disp;
792 VkResult res;
793
794 disp = loader_get_dispatch(device);
795
796 res = disp->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
797 if (res == VK_SUCCESS) {
798 loader_init_dispatch(*pCmdBuffer, disp);
799 }
800
801 return res;
802}
803
804LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
805{
806 const VkLayerDispatchTable *disp;
807
808 disp = loader_get_dispatch(cmdBuffer);
809
810 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo);
811}
812
813LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
814{
815 const VkLayerDispatchTable *disp;
816
817 disp = loader_get_dispatch(cmdBuffer);
818
819 return disp->EndCommandBuffer(cmdBuffer);
820}
821
822LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
823{
824 const VkLayerDispatchTable *disp;
825
826 disp = loader_get_dispatch(cmdBuffer);
827
828 return disp->ResetCommandBuffer(cmdBuffer);
829}
830
831LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
832{
833 const VkLayerDispatchTable *disp;
834
835 disp = loader_get_dispatch(cmdBuffer);
836
837 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
838}
839
840LOADER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
841{
842 const VkLayerDispatchTable *disp;
843
844 disp = loader_get_dispatch(cmdBuffer);
845
846 disp->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
847}
848
Mark Lobodzinskia65c4632015-06-15 13:21:21 -0600849LOADER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600850{
851 const VkLayerDispatchTable *disp;
852
853 disp = loader_get_dispatch(cmdBuffer);
854
Mark Lobodzinskia65c4632015-06-15 13:21:21 -0600855 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600856}
857
858LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
859{
860 const VkLayerDispatchTable *disp;
861
862 disp = loader_get_dispatch(cmdBuffer);
863
864 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
865}
866
867LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
868{
869 const VkLayerDispatchTable *disp;
870
871 disp = loader_get_dispatch(cmdBuffer);
872
873 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
874}
875
876LOADER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
877{
878 const VkLayerDispatchTable *disp;
879
880 disp = loader_get_dispatch(cmdBuffer);
881
882 disp->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
883}
884
885LOADER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
886{
887 const VkLayerDispatchTable *disp;
888
889 disp = loader_get_dispatch(cmdBuffer);
890
891 disp->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
892}
893
894LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
895{
896 const VkLayerDispatchTable *disp;
897
898 disp = loader_get_dispatch(cmdBuffer);
899
900 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
901}
902
903LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
904{
905 const VkLayerDispatchTable *disp;
906
907 disp = loader_get_dispatch(cmdBuffer);
908
909 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
910}
911
912LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
913{
914 const VkLayerDispatchTable *disp;
915
916 disp = loader_get_dispatch(cmdBuffer);
917
918 disp->CmdDispatch(cmdBuffer, x, y, z);
919}
920
921LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
922{
923 const VkLayerDispatchTable *disp;
924
925 disp = loader_get_dispatch(cmdBuffer);
926
927 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset);
928}
929
930LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
931{
932 const VkLayerDispatchTable *disp;
933
934 disp = loader_get_dispatch(cmdBuffer);
935
936 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
937}
938
939LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
940{
941 const VkLayerDispatchTable *disp;
942
943 disp = loader_get_dispatch(cmdBuffer);
944
945 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
946}
947
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500948LOADER_EXPORT void VKAPI vkCmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600949{
950 const VkLayerDispatchTable *disp;
951
952 disp = loader_get_dispatch(cmdBuffer);
953
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500954 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600955}
956
957LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
958{
959 const VkLayerDispatchTable *disp;
960
961 disp = loader_get_dispatch(cmdBuffer);
962
963 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
964}
965
966LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
967{
968 const VkLayerDispatchTable *disp;
969
970 disp = loader_get_dispatch(cmdBuffer);
971
972 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
973}
974
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600975LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
976{
977 const VkLayerDispatchTable *disp;
978
979 disp = loader_get_dispatch(cmdBuffer);
980
981 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
982}
983
984LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
985{
986 const VkLayerDispatchTable *disp;
987
988 disp = loader_get_dispatch(cmdBuffer);
989
990 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
991}
992
Chris Forbese3105972015-06-24 14:34:53 +1200993LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600994{
995 const VkLayerDispatchTable *disp;
996
997 disp = loader_get_dispatch(cmdBuffer);
998
999 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
1000}
1001
Chris Forbes2951d7d2015-06-22 17:21:59 +12001002LOADER_EXPORT void VKAPI vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001003{
1004 const VkLayerDispatchTable *disp;
1005
1006 disp = loader_get_dispatch(cmdBuffer);
1007
Chris Forbes2951d7d2015-06-22 17:21:59 +12001008 disp->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
1009}
1010
Chris Forbese3105972015-06-24 14:34:53 +12001011LOADER_EXPORT void VKAPI vkCmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects)
Chris Forbes2951d7d2015-06-22 17:21:59 +12001012{
1013 const VkLayerDispatchTable *disp;
1014
1015 disp = loader_get_dispatch(cmdBuffer);
1016
1017 disp->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
1018}
1019
1020LOADER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects)
1021{
1022 const VkLayerDispatchTable *disp;
1023
1024 disp = loader_get_dispatch(cmdBuffer);
1025
1026 disp->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001027}
1028
1029LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
1030{
1031 const VkLayerDispatchTable *disp;
1032
1033 disp = loader_get_dispatch(cmdBuffer);
1034
1035 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1036}
1037
Tony Barbourc2e987e2015-06-29 16:20:35 -06001038LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001039{
1040 const VkLayerDispatchTable *disp;
1041
1042 disp = loader_get_dispatch(cmdBuffer);
1043
Tony Barbourc2e987e2015-06-29 16:20:35 -06001044 disp->CmdSetEvent(cmdBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001045}
1046
Tony Barbourc2e987e2015-06-29 16:20:35 -06001047LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001048{
1049 const VkLayerDispatchTable *disp;
1050
1051 disp = loader_get_dispatch(cmdBuffer);
1052
Tony Barbourc2e987e2015-06-29 16:20:35 -06001053 disp->CmdResetEvent(cmdBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001054}
1055
Tony Barbourc2e987e2015-06-29 16:20:35 -06001056LOADER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags sourceStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void** ppMemBarriers)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001057{
1058 const VkLayerDispatchTable *disp;
1059
1060 disp = loader_get_dispatch(cmdBuffer);
1061
Tony Barbourc2e987e2015-06-29 16:20:35 -06001062 disp->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001063}
1064
Tony Barbourc2e987e2015-06-29 16:20:35 -06001065LOADER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags sourceStageMask, VkPipelineStageFlags destStageMask, bool32_t byRegion, uint32_t memBarrierCount, const void** ppMemBarriers)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001066{
1067 const VkLayerDispatchTable *disp;
1068
1069 disp = loader_get_dispatch(cmdBuffer);
1070
Tony Barbourc2e987e2015-06-29 16:20:35 -06001071 disp->CmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001072}
1073
1074LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
1075{
1076 const VkLayerDispatchTable *disp;
1077
1078 disp = loader_get_dispatch(cmdBuffer);
1079
1080 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1081}
1082
1083LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
1084{
1085 const VkLayerDispatchTable *disp;
1086
1087 disp = loader_get_dispatch(cmdBuffer);
1088
1089 disp->CmdEndQuery(cmdBuffer, queryPool, slot);
1090}
1091
1092LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
1093{
1094 const VkLayerDispatchTable *disp;
1095
1096 disp = loader_get_dispatch(cmdBuffer);
1097
1098 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1099}
1100
1101LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset)
1102{
1103 const VkLayerDispatchTable *disp;
1104
1105 disp = loader_get_dispatch(cmdBuffer);
1106
1107 disp->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1108}
1109
1110LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkFlags flags)
1111{
1112 const VkLayerDispatchTable *disp;
1113
1114 disp = loader_get_dispatch(cmdBuffer);
1115
1116 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
1117}
1118
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001119LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
1120{
1121 const VkLayerDispatchTable *disp;
1122
1123 disp = loader_get_dispatch(device);
1124
1125 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
1126}
1127
1128LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
1129{
1130 const VkLayerDispatchTable *disp;
1131
1132 disp = loader_get_dispatch(device);
1133
1134 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass);
1135}
1136
1137LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
1138{
1139 const VkLayerDispatchTable *disp;
1140
1141 disp = loader_get_dispatch(cmdBuffer);
1142
1143 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1144}
1145
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001146LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001147{
1148 const VkLayerDispatchTable *disp;
1149
1150 disp = loader_get_dispatch(cmdBuffer);
1151
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001152 disp->CmdEndRenderPass(cmdBuffer);
1153}
1154
1155LOADER_EXPORT void VKAPI vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers)
1156{
1157 const VkLayerDispatchTable *disp;
1158
1159 disp = loader_get_dispatch(cmdBuffer);
1160
1161 disp->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001162}