blob: b5e5d7aff41c49e300e87109ee9b154433cb9205 [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
149LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceInfo(
150 VkPhysicalDevice gpu,
151 VkPhysicalDeviceInfoType infoType,
152 size_t* pDataSize,
153 void* pData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600154{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600155 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600156 VkResult res;
157
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600158 disp = loader_get_instance_dispatch(gpu);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600159
Jon Ashburnb40f2562015-05-29 13:15:39 -0600160 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600161 res = disp->GetPhysicalDeviceInfo(gpu, infoType, pDataSize, pData);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600162 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600163
164 return res;
165}
166
Chris Forbesd7576302015-06-21 22:55:02 +1200167LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
168 VkPhysicalDevice gpu,
169 VkPhysicalDeviceFeatures *pFeatures)
170{
171 const VkLayerInstanceDispatchTable *disp;
172 VkResult res;
173
174 disp = loader_get_instance_dispatch(gpu);
175
176 loader_platform_thread_lock_mutex(&loader_lock);
177 res = disp->GetPhysicalDeviceFeatures(gpu, pFeatures);
178 loader_platform_thread_unlock_mutex(&loader_lock);
179
180 return res;
181}
182
183LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatInfo(
184 VkPhysicalDevice gpu,
185 VkFormat format,
186 VkFormatProperties *pFormatInfo)
187{
188 const VkLayerInstanceDispatchTable *disp;
189 VkResult res;
190
191 disp = loader_get_instance_dispatch(gpu);
192
193 loader_platform_thread_lock_mutex(&loader_lock);
194 res = disp->GetPhysicalDeviceFormatInfo(gpu, format, pFormatInfo);
195 loader_platform_thread_unlock_mutex(&loader_lock);
196
197 return res;
198}
199
200LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
201 VkPhysicalDevice gpu,
202 VkPhysicalDeviceLimits *pLimits)
203{
204 const VkLayerInstanceDispatchTable *disp;
205 VkResult res;
206
207 disp = loader_get_instance_dispatch(gpu);
208
209 loader_platform_thread_lock_mutex(&loader_lock);
210 res = disp->GetPhysicalDeviceLimits(gpu, pLimits);
211 loader_platform_thread_unlock_mutex(&loader_lock);
212
213 return res;
214}
215
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600216LOADER_EXPORT VkResult VKAPI vkCreateDevice(
217 VkPhysicalDevice gpu,
218 const VkDeviceCreateInfo* pCreateInfo,
219 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600220{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600221 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600222 VkResult res;
223
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600224 disp = loader_get_instance_dispatch(gpu);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600225
Jon Ashburnb40f2562015-05-29 13:15:39 -0600226 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600227 // CreateDevice is dispatched on the instance chain
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600228 res = disp->CreateDevice(gpu, pCreateInfo, pDevice);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600229 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600230 return res;
231}
232
233LOADER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
234{
235 const VkLayerDispatchTable *disp;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600236 VkResult res;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600237
238 disp = loader_get_dispatch(device);
239
Jon Ashburnb40f2562015-05-29 13:15:39 -0600240 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600241 res = disp->DestroyDevice(device);
Jon Ashburncb5a5ac2015-06-10 10:06:06 -0600242 loader_remove_logical_device(device);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600243 loader_platform_thread_unlock_mutex(&loader_lock);
244 return res;
245}
246
247LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionInfo(
248 VkPhysicalDevice gpu,
249 VkExtensionInfoType infoType,
250 uint32_t extensionIndex,
251 size_t* pDataSize,
252 void* pData)
253{
254 VkResult res;
255
256 loader_platform_thread_lock_mutex(&loader_lock);
257 res = loader_GetPhysicalDeviceExtensionInfo(gpu, infoType, extensionIndex, pDataSize, pData);
258 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600259 return res;
260}
261
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600262LOADER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
263{
264 const VkLayerDispatchTable *disp;
265 VkResult res;
266
267 disp = loader_get_dispatch(device);
268
269 res = disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
270 if (res == VK_SUCCESS) {
271 loader_set_dispatch(*pQueue, disp);
272 }
273
274 return res;
275}
276
277LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
278{
279 const VkLayerDispatchTable *disp;
280
281 disp = loader_get_dispatch(queue);
282
283 return disp->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
284}
285
286LOADER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
287{
288 const VkLayerDispatchTable *disp;
289
290 disp = loader_get_dispatch(queue);
291
292 return disp->QueueWaitIdle(queue);
293}
294
295LOADER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
296{
297 const VkLayerDispatchTable *disp;
298
299 disp = loader_get_dispatch(device);
300
301 return disp->DeviceWaitIdle(device);
302}
303
304LOADER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem)
305{
306 const VkLayerDispatchTable *disp;
307
308 disp = loader_get_dispatch(device);
309
310 return disp->AllocMemory(device, pAllocInfo, pMem);
311}
312
313LOADER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
314{
315 const VkLayerDispatchTable *disp;
316
317 disp = loader_get_dispatch(device);
318
319 return disp->FreeMemory(device, mem);
320}
321
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600322LOADER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
323{
324 const VkLayerDispatchTable *disp;
325
326 disp = loader_get_dispatch(device);
327
328 return disp->MapMemory(device, mem, offset, size, flags, ppData);
329}
330
331LOADER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
332{
333 const VkLayerDispatchTable *disp;
334
335 disp = loader_get_dispatch(device);
336
337 return disp->UnmapMemory(device, mem);
338}
339
340LOADER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
341{
342 const VkLayerDispatchTable *disp;
343
344 disp = loader_get_dispatch(device);
345
346 return disp->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
347}
348
349LOADER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
350{
351 const VkLayerDispatchTable *disp;
352
353 disp = loader_get_dispatch(device);
354
355 return disp->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
356}
357
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600358LOADER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
359{
360 const VkLayerDispatchTable *disp;
361
362 disp = loader_get_dispatch(device);
363
364 return disp->DestroyObject(device, objType, object);
365}
366
367LOADER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType objType, VkObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
368{
369 const VkLayerDispatchTable *disp;
370
371 disp = loader_get_dispatch(device);
372
373 return disp->GetObjectInfo(device, objType, object, infoType, pDataSize, pData);
374}
375
Mark Lobodzinski23182612015-05-29 09:32:35 -0500376LOADER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600377{
378 const VkLayerDispatchTable *disp;
379
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500380 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600381
Mark Lobodzinski23182612015-05-29 09:32:35 -0500382 return disp->BindObjectMemory(device, objType, object, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600383}
384
Mark Lobodzinski23182612015-05-29 09:32:35 -0500385LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600386{
387 const VkLayerDispatchTable *disp;
388
389 disp = loader_get_dispatch(queue);
390
Mark Lobodzinski23182612015-05-29 09:32:35 -0500391 return disp->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600392}
393
Mark Lobodzinski23182612015-05-29 09:32:35 -0500394LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600395{
396 const VkLayerDispatchTable *disp;
397
398 disp = loader_get_dispatch(queue);
399
Mark Lobodzinski23182612015-05-29 09:32:35 -0500400 return disp->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600401}
402
403LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
404{
405 const VkLayerDispatchTable *disp;
406
407 disp = loader_get_dispatch(device);
408
409 return disp->CreateFence(device, pCreateInfo, pFence);
410}
411
Courtney Goeltzenleuchterf2e33ad2015-06-18 17:28:20 -0600412LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600413{
414 const VkLayerDispatchTable *disp;
415
416 disp = loader_get_dispatch(device);
417
418 return disp->ResetFences(device, fenceCount, pFences);
419}
420
421LOADER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
422{
423 const VkLayerDispatchTable *disp;
424
425 disp = loader_get_dispatch(device);
426
427 return disp->GetFenceStatus(device, fence);
428}
429
430LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout)
431{
432 const VkLayerDispatchTable *disp;
433
434 disp = loader_get_dispatch(device);
435
436 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
437}
438
439LOADER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
440{
441 const VkLayerDispatchTable *disp;
442
443 disp = loader_get_dispatch(device);
444
445 return disp->CreateSemaphore(device, pCreateInfo, pSemaphore);
446}
447
448LOADER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
449{
450 const VkLayerDispatchTable *disp;
451
452 disp = loader_get_dispatch(queue);
453
454 return disp->QueueSignalSemaphore(queue, semaphore);
455}
456
457LOADER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
458{
459 const VkLayerDispatchTable *disp;
460
461 disp = loader_get_dispatch(queue);
462
463 return disp->QueueWaitSemaphore(queue, semaphore);
464}
465
466LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
467{
468 const VkLayerDispatchTable *disp;
469
470 disp = loader_get_dispatch(device);
471
472 return disp->CreateEvent(device, pCreateInfo, pEvent);
473}
474
475LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
476{
477 const VkLayerDispatchTable *disp;
478
479 disp = loader_get_dispatch(device);
480
481 return disp->GetEventStatus(device, event);
482}
483
484LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
485{
486 const VkLayerDispatchTable *disp;
487
488 disp = loader_get_dispatch(device);
489
490 return disp->SetEvent(device, event);
491}
492
493LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
494{
495 const VkLayerDispatchTable *disp;
496
497 disp = loader_get_dispatch(device);
498
499 return disp->ResetEvent(device, event);
500}
501
502LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
503{
504 const VkLayerDispatchTable *disp;
505
506 disp = loader_get_dispatch(device);
507
508 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool);
509}
510
511LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
512{
513 const VkLayerDispatchTable *disp;
514
515 disp = loader_get_dispatch(device);
516
517 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
518}
519
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600520LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
521{
522 const VkLayerDispatchTable *disp;
523
524 disp = loader_get_dispatch(device);
525
526 return disp->CreateBuffer(device, pCreateInfo, pBuffer);
527}
528
529LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
530{
531 const VkLayerDispatchTable *disp;
532
533 disp = loader_get_dispatch(device);
534
535 return disp->CreateBufferView(device, pCreateInfo, pView);
536}
537
538LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
539{
540 const VkLayerDispatchTable *disp;
541
542 disp = loader_get_dispatch(device);
543
544 return disp->CreateImage(device, pCreateInfo, pImage);
545}
546
547LOADER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
548{
549 const VkLayerDispatchTable *disp;
550
551 disp = loader_get_dispatch(device);
552
553 return disp->GetImageSubresourceInfo(device, image, pSubresource, infoType, pDataSize, pData);
554}
555
556LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
557{
558 const VkLayerDispatchTable *disp;
559
560 disp = loader_get_dispatch(device);
561
562 return disp->CreateImageView(device, pCreateInfo, pView);
563}
564
565LOADER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
566{
567 const VkLayerDispatchTable *disp;
568
569 disp = loader_get_dispatch(device);
570
571 return disp->CreateColorAttachmentView(device, pCreateInfo, pView);
572}
573
574LOADER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
575{
576 const VkLayerDispatchTable *disp;
577
578 disp = loader_get_dispatch(device);
579
580 return disp->CreateDepthStencilView(device, pCreateInfo, pView);
581}
582
583LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
584{
585 const VkLayerDispatchTable *disp;
586
587 disp = loader_get_dispatch(device);
588
589 return disp->CreateShader(device, pCreateInfo, pShader);
590}
591
592LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
593{
594 const VkLayerDispatchTable *disp;
595
596 disp = loader_get_dispatch(device);
597
598 return disp->CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
599}
600
601LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
602{
603 const VkLayerDispatchTable *disp;
604
605 disp = loader_get_dispatch(device);
606
607 return disp->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
608}
609
610LOADER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
611{
612 const VkLayerDispatchTable *disp;
613
614 disp = loader_get_dispatch(device);
615
616 return disp->CreateComputePipeline(device, pCreateInfo, pPipeline);
617}
618
619LOADER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
620{
621 const VkLayerDispatchTable *disp;
622
623 disp = loader_get_dispatch(device);
624
625 return disp->StorePipeline(device, pipeline, pDataSize, pData);
626}
627
628LOADER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
629{
630 const VkLayerDispatchTable *disp;
631
632 disp = loader_get_dispatch(device);
633
634 return disp->LoadPipeline(device, dataSize, pData, pPipeline);
635}
636
637LOADER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
638{
639 const VkLayerDispatchTable *disp;
640
641 disp = loader_get_dispatch(device);
642
643 return disp->LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
644}
645
646LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
647{
648 const VkLayerDispatchTable *disp;
649
650 disp = loader_get_dispatch(device);
651
652 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
653}
654
655LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
656{
657 const VkLayerDispatchTable *disp;
658
659 disp = loader_get_dispatch(device);
660
661 return disp->CreateSampler(device, pCreateInfo, pSampler);
662}
663
664LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
665{
666 const VkLayerDispatchTable *disp;
667
668 disp = loader_get_dispatch(device);
669
670 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
671}
672
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600673LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
674{
675 const VkLayerDispatchTable *disp;
676
677 disp = loader_get_dispatch(device);
678
679 return disp->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
680}
681
682LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
683{
684 const VkLayerDispatchTable *disp;
685
686 disp = loader_get_dispatch(device);
687
688 return disp->ResetDescriptorPool(device, descriptorPool);
689}
690
691LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
692{
693 const VkLayerDispatchTable *disp;
694
695 disp = loader_get_dispatch(device);
696
697 return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
698}
699
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800700LOADER_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 -0600701{
702 const VkLayerDispatchTable *disp;
703
704 disp = loader_get_dispatch(device);
705
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800706 return disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600707}
708
709LOADER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
710{
711 const VkLayerDispatchTable *disp;
712
713 disp = loader_get_dispatch(device);
714
715 return disp->CreateDynamicViewportState(device, pCreateInfo, pState);
716}
717
718LOADER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
719{
720 const VkLayerDispatchTable *disp;
721
722 disp = loader_get_dispatch(device);
723
724 return disp->CreateDynamicRasterState(device, pCreateInfo, pState);
725}
726
727LOADER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
728{
729 const VkLayerDispatchTable *disp;
730
731 disp = loader_get_dispatch(device);
732
733 return disp->CreateDynamicColorBlendState(device, pCreateInfo, pState);
734}
735
736LOADER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
737{
738 const VkLayerDispatchTable *disp;
739
740 disp = loader_get_dispatch(device);
741
742 return disp->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
743}
744
745LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
746{
747 const VkLayerDispatchTable *disp;
748 VkResult res;
749
750 disp = loader_get_dispatch(device);
751
752 res = disp->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
753 if (res == VK_SUCCESS) {
754 loader_init_dispatch(*pCmdBuffer, disp);
755 }
756
757 return res;
758}
759
760LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
761{
762 const VkLayerDispatchTable *disp;
763
764 disp = loader_get_dispatch(cmdBuffer);
765
766 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo);
767}
768
769LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
770{
771 const VkLayerDispatchTable *disp;
772
773 disp = loader_get_dispatch(cmdBuffer);
774
775 return disp->EndCommandBuffer(cmdBuffer);
776}
777
778LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
779{
780 const VkLayerDispatchTable *disp;
781
782 disp = loader_get_dispatch(cmdBuffer);
783
784 return disp->ResetCommandBuffer(cmdBuffer);
785}
786
787LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
788{
789 const VkLayerDispatchTable *disp;
790
791 disp = loader_get_dispatch(cmdBuffer);
792
793 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
794}
795
796LOADER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
797{
798 const VkLayerDispatchTable *disp;
799
800 disp = loader_get_dispatch(cmdBuffer);
801
802 disp->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
803}
804
Mark Lobodzinskia65c4632015-06-15 13:21:21 -0600805LOADER_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 -0600806{
807 const VkLayerDispatchTable *disp;
808
809 disp = loader_get_dispatch(cmdBuffer);
810
Mark Lobodzinskia65c4632015-06-15 13:21:21 -0600811 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600812}
813
814LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
815{
816 const VkLayerDispatchTable *disp;
817
818 disp = loader_get_dispatch(cmdBuffer);
819
820 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
821}
822
823LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
824{
825 const VkLayerDispatchTable *disp;
826
827 disp = loader_get_dispatch(cmdBuffer);
828
829 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
830}
831
832LOADER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
833{
834 const VkLayerDispatchTable *disp;
835
836 disp = loader_get_dispatch(cmdBuffer);
837
838 disp->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
839}
840
841LOADER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
842{
843 const VkLayerDispatchTable *disp;
844
845 disp = loader_get_dispatch(cmdBuffer);
846
847 disp->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
848}
849
850LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
851{
852 const VkLayerDispatchTable *disp;
853
854 disp = loader_get_dispatch(cmdBuffer);
855
856 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
857}
858
859LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
860{
861 const VkLayerDispatchTable *disp;
862
863 disp = loader_get_dispatch(cmdBuffer);
864
865 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
866}
867
868LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
869{
870 const VkLayerDispatchTable *disp;
871
872 disp = loader_get_dispatch(cmdBuffer);
873
874 disp->CmdDispatch(cmdBuffer, x, y, z);
875}
876
877LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
878{
879 const VkLayerDispatchTable *disp;
880
881 disp = loader_get_dispatch(cmdBuffer);
882
883 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset);
884}
885
886LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
887{
888 const VkLayerDispatchTable *disp;
889
890 disp = loader_get_dispatch(cmdBuffer);
891
892 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
893}
894
895LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
896{
897 const VkLayerDispatchTable *disp;
898
899 disp = loader_get_dispatch(cmdBuffer);
900
901 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
902}
903
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500904LOADER_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 -0600905{
906 const VkLayerDispatchTable *disp;
907
908 disp = loader_get_dispatch(cmdBuffer);
909
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500910 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600911}
912
913LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
914{
915 const VkLayerDispatchTable *disp;
916
917 disp = loader_get_dispatch(cmdBuffer);
918
919 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
920}
921
922LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
923{
924 const VkLayerDispatchTable *disp;
925
926 disp = loader_get_dispatch(cmdBuffer);
927
928 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
929}
930
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600931LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
932{
933 const VkLayerDispatchTable *disp;
934
935 disp = loader_get_dispatch(cmdBuffer);
936
937 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
938}
939
940LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
941{
942 const VkLayerDispatchTable *disp;
943
944 disp = loader_get_dispatch(cmdBuffer);
945
946 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
947}
948
949LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
950{
951 const VkLayerDispatchTable *disp;
952
953 disp = loader_get_dispatch(cmdBuffer);
954
955 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
956}
957
958LOADER_EXPORT void VKAPI vkCmdClearDepthStencil(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
959{
960 const VkLayerDispatchTable *disp;
961
962 disp = loader_get_dispatch(cmdBuffer);
963
964 disp->CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
965}
966
967LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
968{
969 const VkLayerDispatchTable *disp;
970
971 disp = loader_get_dispatch(cmdBuffer);
972
973 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
974}
975
976LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
977{
978 const VkLayerDispatchTable *disp;
979
980 disp = loader_get_dispatch(cmdBuffer);
981
982 disp->CmdSetEvent(cmdBuffer, event, pipeEvent);
983}
984
985LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
986{
987 const VkLayerDispatchTable *disp;
988
989 disp = loader_get_dispatch(cmdBuffer);
990
991 disp->CmdResetEvent(cmdBuffer, event, pipeEvent);
992}
993
994LOADER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t eventCount, const VkEvent* pEvents, uint32_t memBarrierCount, const void** ppMemBarriers)
995{
996 const VkLayerDispatchTable *disp;
997
998 disp = loader_get_dispatch(cmdBuffer);
999
1000 disp->CmdWaitEvents(cmdBuffer, waitEvent, eventCount, pEvents, memBarrierCount, ppMemBarriers);
1001}
1002
1003LOADER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t pipeEventCount, const VkPipeEvent* pPipeEvents, uint32_t memBarrierCount, const void** ppMemBarriers)
1004{
1005 const VkLayerDispatchTable *disp;
1006
1007 disp = loader_get_dispatch(cmdBuffer);
1008
1009 disp->CmdPipelineBarrier(cmdBuffer, waitEvent, pipeEventCount, pPipeEvents, memBarrierCount, ppMemBarriers);
1010}
1011
1012LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
1013{
1014 const VkLayerDispatchTable *disp;
1015
1016 disp = loader_get_dispatch(cmdBuffer);
1017
1018 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1019}
1020
1021LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
1022{
1023 const VkLayerDispatchTable *disp;
1024
1025 disp = loader_get_dispatch(cmdBuffer);
1026
1027 disp->CmdEndQuery(cmdBuffer, queryPool, slot);
1028}
1029
1030LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
1031{
1032 const VkLayerDispatchTable *disp;
1033
1034 disp = loader_get_dispatch(cmdBuffer);
1035
1036 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1037}
1038
1039LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset)
1040{
1041 const VkLayerDispatchTable *disp;
1042
1043 disp = loader_get_dispatch(cmdBuffer);
1044
1045 disp->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1046}
1047
1048LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkFlags flags)
1049{
1050 const VkLayerDispatchTable *disp;
1051
1052 disp = loader_get_dispatch(cmdBuffer);
1053
1054 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
1055}
1056
1057LOADER_EXPORT void VKAPI vkCmdInitAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData)
1058{
1059 const VkLayerDispatchTable *disp;
1060
1061 disp = loader_get_dispatch(cmdBuffer);
1062
1063 disp->CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData);
1064}
1065
1066LOADER_EXPORT void VKAPI vkCmdLoadAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer srcBuffer, VkDeviceSize srcOffset)
1067{
1068 const VkLayerDispatchTable *disp;
1069
1070 disp = loader_get_dispatch(cmdBuffer);
1071
1072 disp->CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset);
1073}
1074
1075LOADER_EXPORT void VKAPI vkCmdSaveAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer destBuffer, VkDeviceSize destOffset)
1076{
1077 const VkLayerDispatchTable *disp;
1078
1079 disp = loader_get_dispatch(cmdBuffer);
1080
1081 disp->CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset);
1082}
1083
1084LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
1085{
1086 const VkLayerDispatchTable *disp;
1087
1088 disp = loader_get_dispatch(device);
1089
1090 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
1091}
1092
1093LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
1094{
1095 const VkLayerDispatchTable *disp;
1096
1097 disp = loader_get_dispatch(device);
1098
1099 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass);
1100}
1101
1102LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
1103{
1104 const VkLayerDispatchTable *disp;
1105
1106 disp = loader_get_dispatch(cmdBuffer);
1107
1108 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1109}
1110
1111LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass)
1112{
1113 const VkLayerDispatchTable *disp;
1114
1115 disp = loader_get_dispatch(cmdBuffer);
1116
1117 disp->CmdEndRenderPass(cmdBuffer, renderPass);
1118}