blob: 572db27bf2a9135c0373e46da5cb9b0f85775cca [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"
Jon Ashburncedc15f2015-05-21 18:13:33 -060029#include "wsi_lunarg.h"
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060030#include "debug_report.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060031
Tobin Ehlis3126f012015-05-13 11:57:18 -060032#if defined(WIN32)
33// On Windows need to disable global optimization for function entrypoints or
34// else mhook will not be able to hook all of them
35#pragma optimize( "g", off )
36#endif
37
Jon Ashburn2139a3e2015-05-06 09:02:10 -060038/* Trampoline entrypoints */
Jon Ashburnfce93d92015-05-12 17:26:48 -060039LOADER_EXPORT VkResult VKAPI vkCreateInstance(
40 const VkInstanceCreateInfo* pCreateInfo,
41 VkInstance* pInstance)
42{
43 struct loader_instance *ptr_instance = NULL;
44
45 VkResult res = VK_ERROR_INITIALIZATION_FAILED;
Jon Ashburnfce93d92015-05-12 17:26:48 -060046
47 /* Scan/discover all ICD libraries in a single-threaded manner */
48 loader_platform_thread_once(&once_icd, loader_icd_scan);
49
50 /* get layer libraries in a single-threaded manner */
51 loader_platform_thread_once(&once_layer, layer_lib_scan);
52
53 /* merge any duplicate extensions */
54 loader_platform_thread_once(&once_exts, loader_coalesce_extensions);
55
56 ptr_instance = (struct loader_instance*) malloc(sizeof(struct loader_instance));
57 if (ptr_instance == NULL) {
58 return VK_ERROR_OUT_OF_HOST_MEMORY;
59 }
60 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;
64 if (ptr_instance->app_extension_props == NULL && (ptr_instance->app_extension_count > 0))
Jon Ashburnfce93d92015-05-12 17:26:48 -060065 return VK_ERROR_OUT_OF_HOST_MEMORY;
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060066
67 /*
68 * Make local copy of extension properties indicated by application.
69 */
70 if (ptr_instance->app_extension_props) {
71 memcpy(ptr_instance->app_extension_props,
72 pCreateInfo->pEnabledExtensions,
73 sizeof(VkExtensionProperties) * ptr_instance->app_extension_count);
Jon Ashburnfce93d92015-05-12 17:26:48 -060074 }
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060075
Jon Ashburnbfa43b72015-05-19 14:33:18 -060076 ptr_instance->disp = malloc(sizeof(VkLayerInstanceDispatchTable));
77 if (ptr_instance->disp == NULL)
78 return VK_ERROR_OUT_OF_HOST_MEMORY;
79 memcpy(ptr_instance->disp, &instance_disp, sizeof(instance_disp));
Jon Ashburnfce93d92015-05-12 17:26:48 -060080 ptr_instance->next = loader.instances;
81 loader.instances = ptr_instance;
Jon Ashburncedc15f2015-05-21 18:13:33 -060082
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060083 loader_enable_instance_layers(ptr_instance);
84
85 debug_report_create_instance(ptr_instance);
86 wsi_lunarg_create_instance(ptr_instance);
Jon Ashburncedc15f2015-05-21 18:13:33 -060087
88 /* enable any layers on instance chain */
Jon Ashburnfce93d92015-05-12 17:26:48 -060089 loader_activate_instance_layers(ptr_instance);
90
Jon Ashburnfce93d92015-05-12 17:26:48 -060091 *pInstance = (VkInstance) ptr_instance;
Jon Ashburna179dcf2015-05-21 17:42:17 -060092
93 res = ptr_instance->disp->CreateInstance(pCreateInfo, pInstance);
94
Courtney Goeltzenleuchter23b5f8d2015-06-17 20:51:59 -060095 /*
96 * Finally have the layers in place and everyone has seen
97 * the CreateInstance command go by. This allows the layer's
98 * GetInstanceProcAddr functions to return valid extension functions
99 * if enabled.
100 */
101 loader_activate_instance_layer_extensions(ptr_instance);
102
Jon Ashburnfce93d92015-05-12 17:26:48 -0600103 return res;
104}
105
106LOADER_EXPORT VkResult VKAPI vkDestroyInstance(
107 VkInstance instance)
108{
109 const VkLayerInstanceDispatchTable *disp;
110
111 disp = loader_get_instance_dispatch(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600112
113 /* TODO: Need to free memory allocated in trampoline's CreateInstance call */
114
Jon Ashburnfce93d92015-05-12 17:26:48 -0600115 return disp->DestroyInstance(instance);
116}
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600117
Jon Ashburnfce93d92015-05-12 17:26:48 -0600118LOADER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
119 VkInstance instance,
120 uint32_t* pPhysicalDeviceCount,
121 VkPhysicalDevice* pPhysicalDevices)
122{
123 const VkLayerInstanceDispatchTable *disp;
124
125 disp = loader_get_instance_dispatch(instance);
126 return disp->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount,
127 pPhysicalDevices);
128}
129
130LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceInfo(
131 VkPhysicalDevice gpu,
132 VkPhysicalDeviceInfoType infoType,
133 size_t* pDataSize,
134 void* pData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600135{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600136 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600137 VkResult res;
138
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600139 disp = loader_get_instance_dispatch(gpu);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600140
141 res = disp->GetPhysicalDeviceInfo(gpu, infoType, pDataSize, pData);
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600142 //TODO add check for extension enabled
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600143 if (infoType == VK_PHYSICAL_DEVICE_INFO_TYPE_DISPLAY_PROPERTIES_WSI && pData && res == VK_SUCCESS) {
144 VkDisplayPropertiesWSI *info = pData;
145 size_t count = *pDataSize / sizeof(*info), i;
146 for (i = 0; i < count; i++) {
147 loader_set_dispatch(info[i].display, disp);
148 }
149 }
150
151 return res;
152}
153
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600154LOADER_EXPORT VkResult VKAPI vkCreateDevice(
155 VkPhysicalDevice gpu,
156 const VkDeviceCreateInfo* pCreateInfo,
157 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600158{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600159 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600160 VkResult res;
161
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600162 disp = loader_get_instance_dispatch(gpu);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600163
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600164 // CreateDevice is dispatched on the instance chain
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600165 res = disp->CreateDevice(gpu, pCreateInfo, pDevice);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600166 return res;
167}
168
169LOADER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
170{
171 const VkLayerDispatchTable *disp;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600172 VkResult res;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600173
174 disp = loader_get_dispatch(device);
175
Jon Ashburnfce93d92015-05-12 17:26:48 -0600176 res = disp->DestroyDevice(device);
177 // TODO need to keep track of device objs to be able to get icd/gpu to deactivate
178 //loader_deactivate_device_layer(device);
179 return res;
180}
181
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600182LOADER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
183{
184 const VkLayerDispatchTable *disp;
185 VkResult res;
186
187 disp = loader_get_dispatch(device);
188
189 res = disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
190 if (res == VK_SUCCESS) {
191 loader_set_dispatch(*pQueue, disp);
192 }
193
194 return res;
195}
196
197LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
198{
199 const VkLayerDispatchTable *disp;
200
201 disp = loader_get_dispatch(queue);
202
203 return disp->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
204}
205
206LOADER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
207{
208 const VkLayerDispatchTable *disp;
209
210 disp = loader_get_dispatch(queue);
211
212 return disp->QueueWaitIdle(queue);
213}
214
215LOADER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
216{
217 const VkLayerDispatchTable *disp;
218
219 disp = loader_get_dispatch(device);
220
221 return disp->DeviceWaitIdle(device);
222}
223
224LOADER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem)
225{
226 const VkLayerDispatchTable *disp;
227
228 disp = loader_get_dispatch(device);
229
230 return disp->AllocMemory(device, pAllocInfo, pMem);
231}
232
233LOADER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
234{
235 const VkLayerDispatchTable *disp;
236
237 disp = loader_get_dispatch(device);
238
239 return disp->FreeMemory(device, mem);
240}
241
242LOADER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkDevice device, VkDeviceMemory mem, VkMemoryPriority priority)
243{
244 const VkLayerDispatchTable *disp;
245
246 disp = loader_get_dispatch(device);
247
248 return disp->SetMemoryPriority(device, mem, priority);
249}
250
251LOADER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
252{
253 const VkLayerDispatchTable *disp;
254
255 disp = loader_get_dispatch(device);
256
257 return disp->MapMemory(device, mem, offset, size, flags, ppData);
258}
259
260LOADER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
261{
262 const VkLayerDispatchTable *disp;
263
264 disp = loader_get_dispatch(device);
265
266 return disp->UnmapMemory(device, mem);
267}
268
269LOADER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
270{
271 const VkLayerDispatchTable *disp;
272
273 disp = loader_get_dispatch(device);
274
275 return disp->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
276}
277
278LOADER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
279{
280 const VkLayerDispatchTable *disp;
281
282 disp = loader_get_dispatch(device);
283
284 return disp->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
285}
286
287LOADER_EXPORT VkResult VKAPI vkPinSystemMemory(VkDevice device, const void* pSysMem, size_t memSize, VkDeviceMemory* pMem)
288{
289 const VkLayerDispatchTable *disp;
290
291 disp = loader_get_dispatch(device);
292
293 return disp->PinSystemMemory(device, pSysMem, memSize, pMem);
294}
295
296LOADER_EXPORT VkResult VKAPI vkGetMultiDeviceCompatibility(VkPhysicalDevice gpu0, VkPhysicalDevice gpu1, VkPhysicalDeviceCompatibilityInfo* pInfo)
297{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600298 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600299
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600300 disp = loader_get_instance_dispatch(gpu0);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600301
302 return disp->GetMultiDeviceCompatibility(gpu0, gpu1, pInfo);
303}
304
305LOADER_EXPORT VkResult VKAPI vkOpenSharedMemory(VkDevice device, const VkMemoryOpenInfo* pOpenInfo, VkDeviceMemory* pMem)
306{
307 const VkLayerDispatchTable *disp;
308
309 disp = loader_get_dispatch(device);
310
311 return disp->OpenSharedMemory(device, pOpenInfo, pMem);
312}
313
314LOADER_EXPORT VkResult VKAPI vkOpenSharedSemaphore(VkDevice device, const VkSemaphoreOpenInfo* pOpenInfo, VkSemaphore* pSemaphore)
315{
316 const VkLayerDispatchTable *disp;
317
318 disp = loader_get_dispatch(device);
319
320 return disp->OpenSharedSemaphore(device, pOpenInfo, pSemaphore);
321}
322
323LOADER_EXPORT VkResult VKAPI vkOpenPeerMemory(VkDevice device, const VkPeerMemoryOpenInfo* pOpenInfo, VkDeviceMemory* pMem)
324{
325 const VkLayerDispatchTable *disp;
326
327 disp = loader_get_dispatch(device);
328
329 return disp->OpenPeerMemory(device, pOpenInfo, pMem);
330}
331
332LOADER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImageOpenInfo* pOpenInfo, VkImage* pImage, VkDeviceMemory* pMem)
333{
334 const VkLayerDispatchTable *disp;
335
336 disp = loader_get_dispatch(device);
337
338 return disp->OpenPeerImage(device, pOpenInfo, pImage, pMem);
339}
340
341LOADER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
342{
343 const VkLayerDispatchTable *disp;
344
345 disp = loader_get_dispatch(device);
346
347 return disp->DestroyObject(device, objType, object);
348}
349
350LOADER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType objType, VkObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
351{
352 const VkLayerDispatchTable *disp;
353
354 disp = loader_get_dispatch(device);
355
356 return disp->GetObjectInfo(device, objType, object, infoType, pDataSize, pData);
357}
358
Mark Lobodzinski23182612015-05-29 09:32:35 -0500359LOADER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600360{
361 const VkLayerDispatchTable *disp;
362
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500363 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600364
Mark Lobodzinski23182612015-05-29 09:32:35 -0500365 return disp->BindObjectMemory(device, objType, object, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600366}
367
Mark Lobodzinski23182612015-05-29 09:32:35 -0500368LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600369{
370 const VkLayerDispatchTable *disp;
371
372 disp = loader_get_dispatch(queue);
373
Mark Lobodzinski23182612015-05-29 09:32:35 -0500374 return disp->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600375}
376
Mark Lobodzinski23182612015-05-29 09:32:35 -0500377LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600378{
379 const VkLayerDispatchTable *disp;
380
381 disp = loader_get_dispatch(queue);
382
Mark Lobodzinski23182612015-05-29 09:32:35 -0500383 return disp->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600384}
385
386LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
387{
388 const VkLayerDispatchTable *disp;
389
390 disp = loader_get_dispatch(device);
391
392 return disp->CreateFence(device, pCreateInfo, pFence);
393}
394
395LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, VkFence* pFences)
396{
397 const VkLayerDispatchTable *disp;
398
399 disp = loader_get_dispatch(device);
400
401 return disp->ResetFences(device, fenceCount, pFences);
402}
403
404LOADER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
405{
406 const VkLayerDispatchTable *disp;
407
408 disp = loader_get_dispatch(device);
409
410 return disp->GetFenceStatus(device, fence);
411}
412
413LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout)
414{
415 const VkLayerDispatchTable *disp;
416
417 disp = loader_get_dispatch(device);
418
419 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
420}
421
422LOADER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
423{
424 const VkLayerDispatchTable *disp;
425
426 disp = loader_get_dispatch(device);
427
428 return disp->CreateSemaphore(device, pCreateInfo, pSemaphore);
429}
430
431LOADER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
432{
433 const VkLayerDispatchTable *disp;
434
435 disp = loader_get_dispatch(queue);
436
437 return disp->QueueSignalSemaphore(queue, semaphore);
438}
439
440LOADER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
441{
442 const VkLayerDispatchTable *disp;
443
444 disp = loader_get_dispatch(queue);
445
446 return disp->QueueWaitSemaphore(queue, semaphore);
447}
448
449LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
450{
451 const VkLayerDispatchTable *disp;
452
453 disp = loader_get_dispatch(device);
454
455 return disp->CreateEvent(device, pCreateInfo, pEvent);
456}
457
458LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
459{
460 const VkLayerDispatchTable *disp;
461
462 disp = loader_get_dispatch(device);
463
464 return disp->GetEventStatus(device, event);
465}
466
467LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
468{
469 const VkLayerDispatchTable *disp;
470
471 disp = loader_get_dispatch(device);
472
473 return disp->SetEvent(device, event);
474}
475
476LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
477{
478 const VkLayerDispatchTable *disp;
479
480 disp = loader_get_dispatch(device);
481
482 return disp->ResetEvent(device, event);
483}
484
485LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
486{
487 const VkLayerDispatchTable *disp;
488
489 disp = loader_get_dispatch(device);
490
491 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool);
492}
493
494LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
495{
496 const VkLayerDispatchTable *disp;
497
498 disp = loader_get_dispatch(device);
499
500 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
501}
502
503LOADER_EXPORT VkResult VKAPI vkGetFormatInfo(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData)
504{
505 const VkLayerDispatchTable *disp;
506
507 disp = loader_get_dispatch(device);
508
509 return disp->GetFormatInfo(device, format, infoType, pDataSize, pData);
510}
511
512LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
513{
514 const VkLayerDispatchTable *disp;
515
516 disp = loader_get_dispatch(device);
517
518 return disp->CreateBuffer(device, pCreateInfo, pBuffer);
519}
520
521LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
522{
523 const VkLayerDispatchTable *disp;
524
525 disp = loader_get_dispatch(device);
526
527 return disp->CreateBufferView(device, pCreateInfo, pView);
528}
529
530LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
531{
532 const VkLayerDispatchTable *disp;
533
534 disp = loader_get_dispatch(device);
535
536 return disp->CreateImage(device, pCreateInfo, pImage);
537}
538
539LOADER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
540{
541 const VkLayerDispatchTable *disp;
542
543 disp = loader_get_dispatch(device);
544
545 return disp->GetImageSubresourceInfo(device, image, pSubresource, infoType, pDataSize, pData);
546}
547
548LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
549{
550 const VkLayerDispatchTable *disp;
551
552 disp = loader_get_dispatch(device);
553
554 return disp->CreateImageView(device, pCreateInfo, pView);
555}
556
557LOADER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
558{
559 const VkLayerDispatchTable *disp;
560
561 disp = loader_get_dispatch(device);
562
563 return disp->CreateColorAttachmentView(device, pCreateInfo, pView);
564}
565
566LOADER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
567{
568 const VkLayerDispatchTable *disp;
569
570 disp = loader_get_dispatch(device);
571
572 return disp->CreateDepthStencilView(device, pCreateInfo, pView);
573}
574
575LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
576{
577 const VkLayerDispatchTable *disp;
578
579 disp = loader_get_dispatch(device);
580
581 return disp->CreateShader(device, pCreateInfo, pShader);
582}
583
584LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
585{
586 const VkLayerDispatchTable *disp;
587
588 disp = loader_get_dispatch(device);
589
590 return disp->CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
591}
592
593LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
594{
595 const VkLayerDispatchTable *disp;
596
597 disp = loader_get_dispatch(device);
598
599 return disp->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
600}
601
602LOADER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
603{
604 const VkLayerDispatchTable *disp;
605
606 disp = loader_get_dispatch(device);
607
608 return disp->CreateComputePipeline(device, pCreateInfo, pPipeline);
609}
610
611LOADER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
612{
613 const VkLayerDispatchTable *disp;
614
615 disp = loader_get_dispatch(device);
616
617 return disp->StorePipeline(device, pipeline, pDataSize, pData);
618}
619
620LOADER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
621{
622 const VkLayerDispatchTable *disp;
623
624 disp = loader_get_dispatch(device);
625
626 return disp->LoadPipeline(device, dataSize, pData, pPipeline);
627}
628
629LOADER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
630{
631 const VkLayerDispatchTable *disp;
632
633 disp = loader_get_dispatch(device);
634
635 return disp->LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
636}
637
638LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
639{
640 const VkLayerDispatchTable *disp;
641
642 disp = loader_get_dispatch(device);
643
644 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
645}
646
647LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
648{
649 const VkLayerDispatchTable *disp;
650
651 disp = loader_get_dispatch(device);
652
653 return disp->CreateSampler(device, pCreateInfo, pSampler);
654}
655
656LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
657{
658 const VkLayerDispatchTable *disp;
659
660 disp = loader_get_dispatch(device);
661
662 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
663}
664
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600665LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
666{
667 const VkLayerDispatchTable *disp;
668
669 disp = loader_get_dispatch(device);
670
671 return disp->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
672}
673
674LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
675{
676 const VkLayerDispatchTable *disp;
677
678 disp = loader_get_dispatch(device);
679
680 return disp->ResetDescriptorPool(device, descriptorPool);
681}
682
683LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
684{
685 const VkLayerDispatchTable *disp;
686
687 disp = loader_get_dispatch(device);
688
689 return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
690}
691
692LOADER_EXPORT void VKAPI vkClearDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
693{
694 const VkLayerDispatchTable *disp;
695
696 disp = loader_get_dispatch(device);
697
698 disp->ClearDescriptorSets(device, descriptorPool, count, pDescriptorSets);
699}
700
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800701LOADER_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 -0600702{
703 const VkLayerDispatchTable *disp;
704
705 disp = loader_get_dispatch(device);
706
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800707 return disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600708}
709
710LOADER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
711{
712 const VkLayerDispatchTable *disp;
713
714 disp = loader_get_dispatch(device);
715
716 return disp->CreateDynamicViewportState(device, pCreateInfo, pState);
717}
718
719LOADER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
720{
721 const VkLayerDispatchTable *disp;
722
723 disp = loader_get_dispatch(device);
724
725 return disp->CreateDynamicRasterState(device, pCreateInfo, pState);
726}
727
728LOADER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
729{
730 const VkLayerDispatchTable *disp;
731
732 disp = loader_get_dispatch(device);
733
734 return disp->CreateDynamicColorBlendState(device, pCreateInfo, pState);
735}
736
737LOADER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
738{
739 const VkLayerDispatchTable *disp;
740
741 disp = loader_get_dispatch(device);
742
743 return disp->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
744}
745
746LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
747{
748 const VkLayerDispatchTable *disp;
749 VkResult res;
750
751 disp = loader_get_dispatch(device);
752
753 res = disp->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
754 if (res == VK_SUCCESS) {
755 loader_init_dispatch(*pCmdBuffer, disp);
756 }
757
758 return res;
759}
760
761LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
762{
763 const VkLayerDispatchTable *disp;
764
765 disp = loader_get_dispatch(cmdBuffer);
766
767 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo);
768}
769
770LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
771{
772 const VkLayerDispatchTable *disp;
773
774 disp = loader_get_dispatch(cmdBuffer);
775
776 return disp->EndCommandBuffer(cmdBuffer);
777}
778
779LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
780{
781 const VkLayerDispatchTable *disp;
782
783 disp = loader_get_dispatch(cmdBuffer);
784
785 return disp->ResetCommandBuffer(cmdBuffer);
786}
787
788LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
789{
790 const VkLayerDispatchTable *disp;
791
792 disp = loader_get_dispatch(cmdBuffer);
793
794 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
795}
796
797LOADER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
798{
799 const VkLayerDispatchTable *disp;
800
801 disp = loader_get_dispatch(cmdBuffer);
802
803 disp->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
804}
805
806LOADER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
807{
808 const VkLayerDispatchTable *disp;
809
810 disp = loader_get_dispatch(cmdBuffer);
811
812 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
813}
814
815LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
816{
817 const VkLayerDispatchTable *disp;
818
819 disp = loader_get_dispatch(cmdBuffer);
820
821 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
822}
823
824LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
825{
826 const VkLayerDispatchTable *disp;
827
828 disp = loader_get_dispatch(cmdBuffer);
829
830 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
831}
832
833LOADER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
834{
835 const VkLayerDispatchTable *disp;
836
837 disp = loader_get_dispatch(cmdBuffer);
838
839 disp->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
840}
841
842LOADER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
843{
844 const VkLayerDispatchTable *disp;
845
846 disp = loader_get_dispatch(cmdBuffer);
847
848 disp->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
849}
850
851LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
852{
853 const VkLayerDispatchTable *disp;
854
855 disp = loader_get_dispatch(cmdBuffer);
856
857 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
858}
859
860LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
861{
862 const VkLayerDispatchTable *disp;
863
864 disp = loader_get_dispatch(cmdBuffer);
865
866 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
867}
868
869LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
870{
871 const VkLayerDispatchTable *disp;
872
873 disp = loader_get_dispatch(cmdBuffer);
874
875 disp->CmdDispatch(cmdBuffer, x, y, z);
876}
877
878LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
879{
880 const VkLayerDispatchTable *disp;
881
882 disp = loader_get_dispatch(cmdBuffer);
883
884 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset);
885}
886
887LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
888{
889 const VkLayerDispatchTable *disp;
890
891 disp = loader_get_dispatch(cmdBuffer);
892
893 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
894}
895
896LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
897{
898 const VkLayerDispatchTable *disp;
899
900 disp = loader_get_dispatch(cmdBuffer);
901
902 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
903}
904
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500905LOADER_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 -0600906{
907 const VkLayerDispatchTable *disp;
908
909 disp = loader_get_dispatch(cmdBuffer);
910
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500911 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600912}
913
914LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
915{
916 const VkLayerDispatchTable *disp;
917
918 disp = loader_get_dispatch(cmdBuffer);
919
920 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
921}
922
923LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
924{
925 const VkLayerDispatchTable *disp;
926
927 disp = loader_get_dispatch(cmdBuffer);
928
929 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
930}
931
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600932LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
933{
934 const VkLayerDispatchTable *disp;
935
936 disp = loader_get_dispatch(cmdBuffer);
937
938 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
939}
940
941LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
942{
943 const VkLayerDispatchTable *disp;
944
945 disp = loader_get_dispatch(cmdBuffer);
946
947 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
948}
949
950LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
951{
952 const VkLayerDispatchTable *disp;
953
954 disp = loader_get_dispatch(cmdBuffer);
955
956 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
957}
958
959LOADER_EXPORT void VKAPI vkCmdClearDepthStencil(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
960{
961 const VkLayerDispatchTable *disp;
962
963 disp = loader_get_dispatch(cmdBuffer);
964
965 disp->CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
966}
967
968LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
969{
970 const VkLayerDispatchTable *disp;
971
972 disp = loader_get_dispatch(cmdBuffer);
973
974 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
975}
976
977LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
978{
979 const VkLayerDispatchTable *disp;
980
981 disp = loader_get_dispatch(cmdBuffer);
982
983 disp->CmdSetEvent(cmdBuffer, event, pipeEvent);
984}
985
986LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
987{
988 const VkLayerDispatchTable *disp;
989
990 disp = loader_get_dispatch(cmdBuffer);
991
992 disp->CmdResetEvent(cmdBuffer, event, pipeEvent);
993}
994
995LOADER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t eventCount, const VkEvent* pEvents, uint32_t memBarrierCount, const void** ppMemBarriers)
996{
997 const VkLayerDispatchTable *disp;
998
999 disp = loader_get_dispatch(cmdBuffer);
1000
1001 disp->CmdWaitEvents(cmdBuffer, waitEvent, eventCount, pEvents, memBarrierCount, ppMemBarriers);
1002}
1003
1004LOADER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t pipeEventCount, const VkPipeEvent* pPipeEvents, uint32_t memBarrierCount, const void** ppMemBarriers)
1005{
1006 const VkLayerDispatchTable *disp;
1007
1008 disp = loader_get_dispatch(cmdBuffer);
1009
1010 disp->CmdPipelineBarrier(cmdBuffer, waitEvent, pipeEventCount, pPipeEvents, memBarrierCount, ppMemBarriers);
1011}
1012
1013LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
1014{
1015 const VkLayerDispatchTable *disp;
1016
1017 disp = loader_get_dispatch(cmdBuffer);
1018
1019 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1020}
1021
1022LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
1023{
1024 const VkLayerDispatchTable *disp;
1025
1026 disp = loader_get_dispatch(cmdBuffer);
1027
1028 disp->CmdEndQuery(cmdBuffer, queryPool, slot);
1029}
1030
1031LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
1032{
1033 const VkLayerDispatchTable *disp;
1034
1035 disp = loader_get_dispatch(cmdBuffer);
1036
1037 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1038}
1039
1040LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset)
1041{
1042 const VkLayerDispatchTable *disp;
1043
1044 disp = loader_get_dispatch(cmdBuffer);
1045
1046 disp->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1047}
1048
1049LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkFlags flags)
1050{
1051 const VkLayerDispatchTable *disp;
1052
1053 disp = loader_get_dispatch(cmdBuffer);
1054
1055 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
1056}
1057
1058LOADER_EXPORT void VKAPI vkCmdInitAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData)
1059{
1060 const VkLayerDispatchTable *disp;
1061
1062 disp = loader_get_dispatch(cmdBuffer);
1063
1064 disp->CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData);
1065}
1066
1067LOADER_EXPORT void VKAPI vkCmdLoadAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer srcBuffer, VkDeviceSize srcOffset)
1068{
1069 const VkLayerDispatchTable *disp;
1070
1071 disp = loader_get_dispatch(cmdBuffer);
1072
1073 disp->CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset);
1074}
1075
1076LOADER_EXPORT void VKAPI vkCmdSaveAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer destBuffer, VkDeviceSize destOffset)
1077{
1078 const VkLayerDispatchTable *disp;
1079
1080 disp = loader_get_dispatch(cmdBuffer);
1081
1082 disp->CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset);
1083}
1084
1085LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
1086{
1087 const VkLayerDispatchTable *disp;
1088
1089 disp = loader_get_dispatch(device);
1090
1091 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
1092}
1093
1094LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
1095{
1096 const VkLayerDispatchTable *disp;
1097
1098 disp = loader_get_dispatch(device);
1099
1100 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass);
1101}
1102
1103LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
1104{
1105 const VkLayerDispatchTable *disp;
1106
1107 disp = loader_get_dispatch(cmdBuffer);
1108
1109 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1110}
1111
1112LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass)
1113{
1114 const VkLayerDispatchTable *disp;
1115
1116 disp = loader_get_dispatch(cmdBuffer);
1117
1118 disp->CmdEndRenderPass(cmdBuffer, renderPass);
1119}