blob: 908b47d79183cd1a76604232fbc944c5827e6c56 [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"
29
Tobin Ehlis3126f012015-05-13 11:57:18 -060030#if defined(WIN32)
31// On Windows need to disable global optimization for function entrypoints or
32// else mhook will not be able to hook all of them
33#pragma optimize( "g", off )
34#endif
35
Jon Ashburn2139a3e2015-05-06 09:02:10 -060036/* Trampoline entrypoints */
Jon Ashburnfce93d92015-05-12 17:26:48 -060037LOADER_EXPORT VkResult VKAPI vkCreateInstance(
38 const VkInstanceCreateInfo* pCreateInfo,
39 VkInstance* pInstance)
40{
41 struct loader_instance *ptr_instance = NULL;
42
43 VkResult res = VK_ERROR_INITIALIZATION_FAILED;
44 uint32_t i;
45
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 }
59 memset(ptr_instance, 0, sizeof(struct loader_instance));
60 ptr_instance->extension_count = pCreateInfo->extensionCount;
61 ptr_instance->extension_names = (ptr_instance->extension_count > 0) ?
62 malloc(sizeof (char *) * ptr_instance->extension_count) : NULL;
63 if (ptr_instance->extension_names == NULL && (ptr_instance->extension_count > 0))
64 return VK_ERROR_OUT_OF_HOST_MEMORY;
65 for (i = 0; i < ptr_instance->extension_count; i++) {
66 if (!loader_is_extension_scanned(pCreateInfo->ppEnabledExtensionNames[i]))
67 return VK_ERROR_INVALID_EXTENSION;
68 ptr_instance->extension_names[i] = malloc(strlen(pCreateInfo->ppEnabledExtensionNames[i]) + 1);
69 if (ptr_instance->extension_names[i] == NULL)
70 return VK_ERROR_OUT_OF_HOST_MEMORY;
71 strcpy(ptr_instance->extension_names[i], pCreateInfo->ppEnabledExtensionNames[i]);
72 }
73 ptr_instance->next = loader.instances;
74 loader.instances = ptr_instance;
75 ptr_instance->disp = &instance_disp;
76 loader_activate_instance_layers(ptr_instance);
77
78 res = instance_disp.CreateInstance(pCreateInfo, (VkInstance *) ptr_instance);
79
80 *pInstance = (VkInstance) ptr_instance;
81 return res;
82}
83
84LOADER_EXPORT VkResult VKAPI vkDestroyInstance(
85 VkInstance instance)
86{
87 const VkLayerInstanceDispatchTable *disp;
88
89 disp = loader_get_instance_dispatch(instance);
90 return disp->DestroyInstance(instance);
91}
Jon Ashburn2666e2f2015-05-15 15:09:35 -060092
Jon Ashburnfce93d92015-05-12 17:26:48 -060093LOADER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
94 VkInstance instance,
95 uint32_t* pPhysicalDeviceCount,
96 VkPhysicalDevice* pPhysicalDevices)
97{
98 const VkLayerInstanceDispatchTable *disp;
99
100 disp = loader_get_instance_dispatch(instance);
101 return disp->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount,
102 pPhysicalDevices);
103}
104
105LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceInfo(
106 VkPhysicalDevice gpu,
107 VkPhysicalDeviceInfoType infoType,
108 size_t* pDataSize,
109 void* pData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600110{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600111 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600112 VkResult res;
113
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600114 disp = loader_get_instance_dispatch(gpu);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600115
116 res = disp->GetPhysicalDeviceInfo(gpu, infoType, pDataSize, pData);
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600117 //TODO add check for extension enabled
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600118 if (infoType == VK_PHYSICAL_DEVICE_INFO_TYPE_DISPLAY_PROPERTIES_WSI && pData && res == VK_SUCCESS) {
119 VkDisplayPropertiesWSI *info = pData;
120 size_t count = *pDataSize / sizeof(*info), i;
121 for (i = 0; i < count; i++) {
122 loader_set_dispatch(info[i].display, disp);
123 }
124 }
125
126 return res;
127}
128
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600129LOADER_EXPORT VkResult VKAPI vkCreateDevice(
130 VkPhysicalDevice gpu,
131 const VkDeviceCreateInfo* pCreateInfo,
132 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600133{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600134 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600135 VkResult res;
136
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600137 disp = loader_get_instance_dispatch(gpu);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600138
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600139 // CreateDevice is dispatched on the instance chain
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600140 res = disp->CreateDevice(gpu, pCreateInfo, pDevice);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600141 return res;
142}
143
144LOADER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
145{
146 const VkLayerDispatchTable *disp;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600147 VkResult res;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600148
149 disp = loader_get_dispatch(device);
150
Jon Ashburnfce93d92015-05-12 17:26:48 -0600151 res = disp->DestroyDevice(device);
152 // TODO need to keep track of device objs to be able to get icd/gpu to deactivate
153 //loader_deactivate_device_layer(device);
154 return res;
155}
156
Jon Ashburn9de95602015-05-18 15:28:32 -0600157#if 0 //TODO get working on layer instance chain
Jon Ashburnfce93d92015-05-12 17:26:48 -0600158LOADER_EXPORT VkResult VKAPI vkGetGlobalExtensionInfo(
159 VkExtensionInfoType infoType,
160 uint32_t extensionIndex,
161 size_t* pDataSize,
162 void* pData)
163{
164 return instance_disp.GetGlobalExtensionInfo(infoType, extensionIndex, pDataSize, pData);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600165}
Jon Ashburn9de95602015-05-18 15:28:32 -0600166#endif
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600167
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600168LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionInfo(
169 VkPhysicalDevice gpu,
170 VkExtensionInfoType infoType,
171 uint32_t extensionIndex,
172 size_t* pDataSize,
173 void* pData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600174{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600175 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600176
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600177 disp = loader_get_instance_dispatch(gpu);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600178
179 return disp->GetPhysicalDeviceExtensionInfo(gpu, infoType, extensionIndex, pDataSize, pData);
180}
181
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600182LOADER_EXPORT VkResult VKAPI vkEnumerateLayers(
183 VkPhysicalDevice gpu,
184 size_t maxStringSize,
185 size_t* pLayerCount,
186 char* const* pOutLayers,
187 void* pReserved)
188{
189 const VkLayerInstanceDispatchTable *disp;
190
191 disp = loader_get_instance_dispatch(gpu);
192
193 return disp->EnumerateLayers(gpu, maxStringSize, pLayerCount,pOutLayers, pReserved);
194}
195
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600196LOADER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
197{
198 const VkLayerDispatchTable *disp;
199 VkResult res;
200
201 disp = loader_get_dispatch(device);
202
203 res = disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
204 if (res == VK_SUCCESS) {
205 loader_set_dispatch(*pQueue, disp);
206 }
207
208 return res;
209}
210
211LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
212{
213 const VkLayerDispatchTable *disp;
214
215 disp = loader_get_dispatch(queue);
216
217 return disp->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
218}
219
220LOADER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
221{
222 const VkLayerDispatchTable *disp;
223
224 disp = loader_get_dispatch(queue);
225
226 return disp->QueueWaitIdle(queue);
227}
228
229LOADER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
230{
231 const VkLayerDispatchTable *disp;
232
233 disp = loader_get_dispatch(device);
234
235 return disp->DeviceWaitIdle(device);
236}
237
238LOADER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem)
239{
240 const VkLayerDispatchTable *disp;
241
242 disp = loader_get_dispatch(device);
243
244 return disp->AllocMemory(device, pAllocInfo, pMem);
245}
246
247LOADER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
248{
249 const VkLayerDispatchTable *disp;
250
251 disp = loader_get_dispatch(device);
252
253 return disp->FreeMemory(device, mem);
254}
255
256LOADER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkDevice device, VkDeviceMemory mem, VkMemoryPriority priority)
257{
258 const VkLayerDispatchTable *disp;
259
260 disp = loader_get_dispatch(device);
261
262 return disp->SetMemoryPriority(device, mem, priority);
263}
264
265LOADER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
266{
267 const VkLayerDispatchTable *disp;
268
269 disp = loader_get_dispatch(device);
270
271 return disp->MapMemory(device, mem, offset, size, flags, ppData);
272}
273
274LOADER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
275{
276 const VkLayerDispatchTable *disp;
277
278 disp = loader_get_dispatch(device);
279
280 return disp->UnmapMemory(device, mem);
281}
282
283LOADER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
284{
285 const VkLayerDispatchTable *disp;
286
287 disp = loader_get_dispatch(device);
288
289 return disp->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
290}
291
292LOADER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
293{
294 const VkLayerDispatchTable *disp;
295
296 disp = loader_get_dispatch(device);
297
298 return disp->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
299}
300
301LOADER_EXPORT VkResult VKAPI vkPinSystemMemory(VkDevice device, const void* pSysMem, size_t memSize, VkDeviceMemory* pMem)
302{
303 const VkLayerDispatchTable *disp;
304
305 disp = loader_get_dispatch(device);
306
307 return disp->PinSystemMemory(device, pSysMem, memSize, pMem);
308}
309
310LOADER_EXPORT VkResult VKAPI vkGetMultiDeviceCompatibility(VkPhysicalDevice gpu0, VkPhysicalDevice gpu1, VkPhysicalDeviceCompatibilityInfo* pInfo)
311{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600312 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600313
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600314 disp = loader_get_instance_dispatch(gpu0);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600315
316 return disp->GetMultiDeviceCompatibility(gpu0, gpu1, pInfo);
317}
318
319LOADER_EXPORT VkResult VKAPI vkOpenSharedMemory(VkDevice device, const VkMemoryOpenInfo* pOpenInfo, VkDeviceMemory* pMem)
320{
321 const VkLayerDispatchTable *disp;
322
323 disp = loader_get_dispatch(device);
324
325 return disp->OpenSharedMemory(device, pOpenInfo, pMem);
326}
327
328LOADER_EXPORT VkResult VKAPI vkOpenSharedSemaphore(VkDevice device, const VkSemaphoreOpenInfo* pOpenInfo, VkSemaphore* pSemaphore)
329{
330 const VkLayerDispatchTable *disp;
331
332 disp = loader_get_dispatch(device);
333
334 return disp->OpenSharedSemaphore(device, pOpenInfo, pSemaphore);
335}
336
337LOADER_EXPORT VkResult VKAPI vkOpenPeerMemory(VkDevice device, const VkPeerMemoryOpenInfo* pOpenInfo, VkDeviceMemory* pMem)
338{
339 const VkLayerDispatchTable *disp;
340
341 disp = loader_get_dispatch(device);
342
343 return disp->OpenPeerMemory(device, pOpenInfo, pMem);
344}
345
346LOADER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImageOpenInfo* pOpenInfo, VkImage* pImage, VkDeviceMemory* pMem)
347{
348 const VkLayerDispatchTable *disp;
349
350 disp = loader_get_dispatch(device);
351
352 return disp->OpenPeerImage(device, pOpenInfo, pImage, pMem);
353}
354
355LOADER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
356{
357 const VkLayerDispatchTable *disp;
358
359 disp = loader_get_dispatch(device);
360
361 return disp->DestroyObject(device, objType, object);
362}
363
364LOADER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType objType, VkObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
365{
366 const VkLayerDispatchTable *disp;
367
368 disp = loader_get_dispatch(device);
369
370 return disp->GetObjectInfo(device, objType, object, infoType, pDataSize, pData);
371}
372
Mark Lobodzinski23182612015-05-29 09:32:35 -0500373LOADER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600374{
375 const VkLayerDispatchTable *disp;
376
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500377 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600378
Mark Lobodzinski23182612015-05-29 09:32:35 -0500379 return disp->BindObjectMemory(device, objType, object, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600380}
381
Mark Lobodzinski23182612015-05-29 09:32:35 -0500382LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600383{
384 const VkLayerDispatchTable *disp;
385
386 disp = loader_get_dispatch(queue);
387
Mark Lobodzinski23182612015-05-29 09:32:35 -0500388 return disp->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600389}
390
Mark Lobodzinski23182612015-05-29 09:32:35 -0500391LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600392{
393 const VkLayerDispatchTable *disp;
394
395 disp = loader_get_dispatch(queue);
396
Mark Lobodzinski23182612015-05-29 09:32:35 -0500397 return disp->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600398}
399
400LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
401{
402 const VkLayerDispatchTable *disp;
403
404 disp = loader_get_dispatch(device);
405
406 return disp->CreateFence(device, pCreateInfo, pFence);
407}
408
409LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, VkFence* pFences)
410{
411 const VkLayerDispatchTable *disp;
412
413 disp = loader_get_dispatch(device);
414
415 return disp->ResetFences(device, fenceCount, pFences);
416}
417
418LOADER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
419{
420 const VkLayerDispatchTable *disp;
421
422 disp = loader_get_dispatch(device);
423
424 return disp->GetFenceStatus(device, fence);
425}
426
427LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout)
428{
429 const VkLayerDispatchTable *disp;
430
431 disp = loader_get_dispatch(device);
432
433 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
434}
435
436LOADER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
437{
438 const VkLayerDispatchTable *disp;
439
440 disp = loader_get_dispatch(device);
441
442 return disp->CreateSemaphore(device, pCreateInfo, pSemaphore);
443}
444
445LOADER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
446{
447 const VkLayerDispatchTable *disp;
448
449 disp = loader_get_dispatch(queue);
450
451 return disp->QueueSignalSemaphore(queue, semaphore);
452}
453
454LOADER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
455{
456 const VkLayerDispatchTable *disp;
457
458 disp = loader_get_dispatch(queue);
459
460 return disp->QueueWaitSemaphore(queue, semaphore);
461}
462
463LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
464{
465 const VkLayerDispatchTable *disp;
466
467 disp = loader_get_dispatch(device);
468
469 return disp->CreateEvent(device, pCreateInfo, pEvent);
470}
471
472LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
473{
474 const VkLayerDispatchTable *disp;
475
476 disp = loader_get_dispatch(device);
477
478 return disp->GetEventStatus(device, event);
479}
480
481LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
482{
483 const VkLayerDispatchTable *disp;
484
485 disp = loader_get_dispatch(device);
486
487 return disp->SetEvent(device, event);
488}
489
490LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
491{
492 const VkLayerDispatchTable *disp;
493
494 disp = loader_get_dispatch(device);
495
496 return disp->ResetEvent(device, event);
497}
498
499LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
500{
501 const VkLayerDispatchTable *disp;
502
503 disp = loader_get_dispatch(device);
504
505 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool);
506}
507
508LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
509{
510 const VkLayerDispatchTable *disp;
511
512 disp = loader_get_dispatch(device);
513
514 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
515}
516
517LOADER_EXPORT VkResult VKAPI vkGetFormatInfo(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData)
518{
519 const VkLayerDispatchTable *disp;
520
521 disp = loader_get_dispatch(device);
522
523 return disp->GetFormatInfo(device, format, infoType, pDataSize, pData);
524}
525
526LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
527{
528 const VkLayerDispatchTable *disp;
529
530 disp = loader_get_dispatch(device);
531
532 return disp->CreateBuffer(device, pCreateInfo, pBuffer);
533}
534
535LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
536{
537 const VkLayerDispatchTable *disp;
538
539 disp = loader_get_dispatch(device);
540
541 return disp->CreateBufferView(device, pCreateInfo, pView);
542}
543
544LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
545{
546 const VkLayerDispatchTable *disp;
547
548 disp = loader_get_dispatch(device);
549
550 return disp->CreateImage(device, pCreateInfo, pImage);
551}
552
553LOADER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
554{
555 const VkLayerDispatchTable *disp;
556
557 disp = loader_get_dispatch(device);
558
559 return disp->GetImageSubresourceInfo(device, image, pSubresource, infoType, pDataSize, pData);
560}
561
562LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
563{
564 const VkLayerDispatchTable *disp;
565
566 disp = loader_get_dispatch(device);
567
568 return disp->CreateImageView(device, pCreateInfo, pView);
569}
570
571LOADER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
572{
573 const VkLayerDispatchTable *disp;
574
575 disp = loader_get_dispatch(device);
576
577 return disp->CreateColorAttachmentView(device, pCreateInfo, pView);
578}
579
580LOADER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
581{
582 const VkLayerDispatchTable *disp;
583
584 disp = loader_get_dispatch(device);
585
586 return disp->CreateDepthStencilView(device, pCreateInfo, pView);
587}
588
589LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
590{
591 const VkLayerDispatchTable *disp;
592
593 disp = loader_get_dispatch(device);
594
595 return disp->CreateShader(device, pCreateInfo, pShader);
596}
597
598LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
599{
600 const VkLayerDispatchTable *disp;
601
602 disp = loader_get_dispatch(device);
603
604 return disp->CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
605}
606
607LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
608{
609 const VkLayerDispatchTable *disp;
610
611 disp = loader_get_dispatch(device);
612
613 return disp->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
614}
615
616LOADER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
617{
618 const VkLayerDispatchTable *disp;
619
620 disp = loader_get_dispatch(device);
621
622 return disp->CreateComputePipeline(device, pCreateInfo, pPipeline);
623}
624
625LOADER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
626{
627 const VkLayerDispatchTable *disp;
628
629 disp = loader_get_dispatch(device);
630
631 return disp->StorePipeline(device, pipeline, pDataSize, pData);
632}
633
634LOADER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
635{
636 const VkLayerDispatchTable *disp;
637
638 disp = loader_get_dispatch(device);
639
640 return disp->LoadPipeline(device, dataSize, pData, pPipeline);
641}
642
643LOADER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
644{
645 const VkLayerDispatchTable *disp;
646
647 disp = loader_get_dispatch(device);
648
649 return disp->LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
650}
651
652LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
653{
654 const VkLayerDispatchTable *disp;
655
656 disp = loader_get_dispatch(device);
657
658 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
659}
660
661LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
662{
663 const VkLayerDispatchTable *disp;
664
665 disp = loader_get_dispatch(device);
666
667 return disp->CreateSampler(device, pCreateInfo, pSampler);
668}
669
670LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
671{
672 const VkLayerDispatchTable *disp;
673
674 disp = loader_get_dispatch(device);
675
676 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
677}
678
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600679LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
680{
681 const VkLayerDispatchTable *disp;
682
683 disp = loader_get_dispatch(device);
684
685 return disp->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
686}
687
688LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
689{
690 const VkLayerDispatchTable *disp;
691
692 disp = loader_get_dispatch(device);
693
694 return disp->ResetDescriptorPool(device, descriptorPool);
695}
696
697LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
698{
699 const VkLayerDispatchTable *disp;
700
701 disp = loader_get_dispatch(device);
702
703 return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
704}
705
706LOADER_EXPORT void VKAPI vkClearDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
707{
708 const VkLayerDispatchTable *disp;
709
710 disp = loader_get_dispatch(device);
711
712 disp->ClearDescriptorSets(device, descriptorPool, count, pDescriptorSets);
713}
714
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800715LOADER_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 -0600716{
717 const VkLayerDispatchTable *disp;
718
719 disp = loader_get_dispatch(device);
720
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800721 return disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600722}
723
724LOADER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
725{
726 const VkLayerDispatchTable *disp;
727
728 disp = loader_get_dispatch(device);
729
730 return disp->CreateDynamicViewportState(device, pCreateInfo, pState);
731}
732
733LOADER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
734{
735 const VkLayerDispatchTable *disp;
736
737 disp = loader_get_dispatch(device);
738
739 return disp->CreateDynamicRasterState(device, pCreateInfo, pState);
740}
741
742LOADER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
743{
744 const VkLayerDispatchTable *disp;
745
746 disp = loader_get_dispatch(device);
747
748 return disp->CreateDynamicColorBlendState(device, pCreateInfo, pState);
749}
750
751LOADER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
752{
753 const VkLayerDispatchTable *disp;
754
755 disp = loader_get_dispatch(device);
756
757 return disp->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
758}
759
760LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
761{
762 const VkLayerDispatchTable *disp;
763 VkResult res;
764
765 disp = loader_get_dispatch(device);
766
767 res = disp->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
768 if (res == VK_SUCCESS) {
769 loader_init_dispatch(*pCmdBuffer, disp);
770 }
771
772 return res;
773}
774
775LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
776{
777 const VkLayerDispatchTable *disp;
778
779 disp = loader_get_dispatch(cmdBuffer);
780
781 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo);
782}
783
784LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
785{
786 const VkLayerDispatchTable *disp;
787
788 disp = loader_get_dispatch(cmdBuffer);
789
790 return disp->EndCommandBuffer(cmdBuffer);
791}
792
793LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
794{
795 const VkLayerDispatchTable *disp;
796
797 disp = loader_get_dispatch(cmdBuffer);
798
799 return disp->ResetCommandBuffer(cmdBuffer);
800}
801
802LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
803{
804 const VkLayerDispatchTable *disp;
805
806 disp = loader_get_dispatch(cmdBuffer);
807
808 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
809}
810
811LOADER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
812{
813 const VkLayerDispatchTable *disp;
814
815 disp = loader_get_dispatch(cmdBuffer);
816
817 disp->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
818}
819
820LOADER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
821{
822 const VkLayerDispatchTable *disp;
823
824 disp = loader_get_dispatch(cmdBuffer);
825
826 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
827}
828
829LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
830{
831 const VkLayerDispatchTable *disp;
832
833 disp = loader_get_dispatch(cmdBuffer);
834
835 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
836}
837
838LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
839{
840 const VkLayerDispatchTable *disp;
841
842 disp = loader_get_dispatch(cmdBuffer);
843
844 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
845}
846
847LOADER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
848{
849 const VkLayerDispatchTable *disp;
850
851 disp = loader_get_dispatch(cmdBuffer);
852
853 disp->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
854}
855
856LOADER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
857{
858 const VkLayerDispatchTable *disp;
859
860 disp = loader_get_dispatch(cmdBuffer);
861
862 disp->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
863}
864
865LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
866{
867 const VkLayerDispatchTable *disp;
868
869 disp = loader_get_dispatch(cmdBuffer);
870
871 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
872}
873
874LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
875{
876 const VkLayerDispatchTable *disp;
877
878 disp = loader_get_dispatch(cmdBuffer);
879
880 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
881}
882
883LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
884{
885 const VkLayerDispatchTable *disp;
886
887 disp = loader_get_dispatch(cmdBuffer);
888
889 disp->CmdDispatch(cmdBuffer, x, y, z);
890}
891
892LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
893{
894 const VkLayerDispatchTable *disp;
895
896 disp = loader_get_dispatch(cmdBuffer);
897
898 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset);
899}
900
901LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
902{
903 const VkLayerDispatchTable *disp;
904
905 disp = loader_get_dispatch(cmdBuffer);
906
907 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
908}
909
910LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
911{
912 const VkLayerDispatchTable *disp;
913
914 disp = loader_get_dispatch(cmdBuffer);
915
916 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
917}
918
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500919LOADER_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 -0600920{
921 const VkLayerDispatchTable *disp;
922
923 disp = loader_get_dispatch(cmdBuffer);
924
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500925 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600926}
927
928LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
929{
930 const VkLayerDispatchTable *disp;
931
932 disp = loader_get_dispatch(cmdBuffer);
933
934 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
935}
936
937LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
938{
939 const VkLayerDispatchTable *disp;
940
941 disp = loader_get_dispatch(cmdBuffer);
942
943 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
944}
945
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600946LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
947{
948 const VkLayerDispatchTable *disp;
949
950 disp = loader_get_dispatch(cmdBuffer);
951
952 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
953}
954
955LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
956{
957 const VkLayerDispatchTable *disp;
958
959 disp = loader_get_dispatch(cmdBuffer);
960
961 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
962}
963
964LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
965{
966 const VkLayerDispatchTable *disp;
967
968 disp = loader_get_dispatch(cmdBuffer);
969
970 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
971}
972
973LOADER_EXPORT void VKAPI vkCmdClearDepthStencil(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
974{
975 const VkLayerDispatchTable *disp;
976
977 disp = loader_get_dispatch(cmdBuffer);
978
979 disp->CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
980}
981
982LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
983{
984 const VkLayerDispatchTable *disp;
985
986 disp = loader_get_dispatch(cmdBuffer);
987
988 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
989}
990
991LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
992{
993 const VkLayerDispatchTable *disp;
994
995 disp = loader_get_dispatch(cmdBuffer);
996
997 disp->CmdSetEvent(cmdBuffer, event, pipeEvent);
998}
999
1000LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
1001{
1002 const VkLayerDispatchTable *disp;
1003
1004 disp = loader_get_dispatch(cmdBuffer);
1005
1006 disp->CmdResetEvent(cmdBuffer, event, pipeEvent);
1007}
1008
1009LOADER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t eventCount, const VkEvent* pEvents, uint32_t memBarrierCount, const void** ppMemBarriers)
1010{
1011 const VkLayerDispatchTable *disp;
1012
1013 disp = loader_get_dispatch(cmdBuffer);
1014
1015 disp->CmdWaitEvents(cmdBuffer, waitEvent, eventCount, pEvents, memBarrierCount, ppMemBarriers);
1016}
1017
1018LOADER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t pipeEventCount, const VkPipeEvent* pPipeEvents, uint32_t memBarrierCount, const void** ppMemBarriers)
1019{
1020 const VkLayerDispatchTable *disp;
1021
1022 disp = loader_get_dispatch(cmdBuffer);
1023
1024 disp->CmdPipelineBarrier(cmdBuffer, waitEvent, pipeEventCount, pPipeEvents, memBarrierCount, ppMemBarriers);
1025}
1026
1027LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
1028{
1029 const VkLayerDispatchTable *disp;
1030
1031 disp = loader_get_dispatch(cmdBuffer);
1032
1033 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1034}
1035
1036LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
1037{
1038 const VkLayerDispatchTable *disp;
1039
1040 disp = loader_get_dispatch(cmdBuffer);
1041
1042 disp->CmdEndQuery(cmdBuffer, queryPool, slot);
1043}
1044
1045LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
1046{
1047 const VkLayerDispatchTable *disp;
1048
1049 disp = loader_get_dispatch(cmdBuffer);
1050
1051 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1052}
1053
1054LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset)
1055{
1056 const VkLayerDispatchTable *disp;
1057
1058 disp = loader_get_dispatch(cmdBuffer);
1059
1060 disp->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1061}
1062
1063LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkFlags flags)
1064{
1065 const VkLayerDispatchTable *disp;
1066
1067 disp = loader_get_dispatch(cmdBuffer);
1068
1069 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
1070}
1071
1072LOADER_EXPORT void VKAPI vkCmdInitAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData)
1073{
1074 const VkLayerDispatchTable *disp;
1075
1076 disp = loader_get_dispatch(cmdBuffer);
1077
1078 disp->CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData);
1079}
1080
1081LOADER_EXPORT void VKAPI vkCmdLoadAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer srcBuffer, VkDeviceSize srcOffset)
1082{
1083 const VkLayerDispatchTable *disp;
1084
1085 disp = loader_get_dispatch(cmdBuffer);
1086
1087 disp->CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset);
1088}
1089
1090LOADER_EXPORT void VKAPI vkCmdSaveAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer destBuffer, VkDeviceSize destOffset)
1091{
1092 const VkLayerDispatchTable *disp;
1093
1094 disp = loader_get_dispatch(cmdBuffer);
1095
1096 disp->CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset);
1097}
1098
1099LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
1100{
1101 const VkLayerDispatchTable *disp;
1102
1103 disp = loader_get_dispatch(device);
1104
1105 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
1106}
1107
1108LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
1109{
1110 const VkLayerDispatchTable *disp;
1111
1112 disp = loader_get_dispatch(device);
1113
1114 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass);
1115}
1116
1117LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
1118{
1119 const VkLayerDispatchTable *disp;
1120
1121 disp = loader_get_dispatch(cmdBuffer);
1122
1123 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1124}
1125
1126LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass)
1127{
1128 const VkLayerDispatchTable *disp;
1129
1130 disp = loader_get_dispatch(cmdBuffer);
1131
1132 disp->CmdEndRenderPass(cmdBuffer, renderPass);
1133}
1134
Jon Ashburnfce93d92015-05-12 17:26:48 -06001135LOADER_EXPORT VkResult VKAPI vkDbgRegisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, void* pUserData)
1136{
1137 const VkLayerInstanceDispatchTable *disp;
1138
1139 disp = loader_get_instance_dispatch(instance);
1140
1141 return disp->DbgRegisterMsgCallback(instance, pfnMsgCallback, pUserData);
1142}
1143
1144LOADER_EXPORT VkResult VKAPI vkDbgUnregisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback)
1145{
1146 const VkLayerInstanceDispatchTable *disp;
1147
1148 disp = loader_get_instance_dispatch(instance);
1149
1150 return disp->DbgUnregisterMsgCallback(instance, pfnMsgCallback);
1151}
1152
1153LOADER_EXPORT VkResult VKAPI vkDbgSetGlobalOption(VkInstance instance, VK_DBG_GLOBAL_OPTION dbgOption, size_t dataSize, const void* pData)
1154{
1155 const VkLayerInstanceDispatchTable *disp;
1156
1157 disp = loader_get_instance_dispatch(instance);
1158
1159 return disp->DbgSetGlobalOption(instance, dbgOption, dataSize, pData);
1160}
1161
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001162LOADER_EXPORT VkResult VKAPI vkDbgSetValidationLevel(VkDevice device, VkValidationLevel validationLevel)
1163{
1164 const VkLayerDispatchTable *disp;
1165
1166 disp = loader_get_dispatch(device);
1167
1168 return disp->DbgSetValidationLevel(device, validationLevel);
1169}
1170
1171LOADER_EXPORT VkResult VKAPI vkDbgSetMessageFilter(VkDevice device, int32_t msgCode, VK_DBG_MSG_FILTER filter)
1172{
1173 const VkLayerDispatchTable *disp;
1174
1175 disp = loader_get_dispatch(device);
1176
1177 return disp->DbgSetMessageFilter(device, msgCode, filter);
1178}
1179
1180LOADER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkDevice device, VkObject object, size_t tagSize, const void* pTag)
1181{
1182 const VkLayerDispatchTable *disp;
1183
1184 disp = loader_get_dispatch(device);
1185
1186 return disp->DbgSetObjectTag(device, object, tagSize, pTag);
1187}
1188
1189LOADER_EXPORT VkResult VKAPI vkDbgSetDeviceOption(VkDevice device, VK_DBG_DEVICE_OPTION dbgOption, size_t dataSize, const void* pData)
1190{
1191 const VkLayerDispatchTable *disp;
1192
1193 disp = loader_get_dispatch(device);
1194
1195 return disp->DbgSetDeviceOption(device, dbgOption, dataSize, pData);
1196}
1197
1198LOADER_EXPORT void VKAPI vkCmdDbgMarkerBegin(VkCmdBuffer cmdBuffer, const char* pMarker)
1199{
1200 const VkLayerDispatchTable *disp;
1201
1202 disp = loader_get_dispatch(cmdBuffer);
1203
1204 disp->CmdDbgMarkerBegin(cmdBuffer, pMarker);
1205}
1206
1207LOADER_EXPORT void VKAPI vkCmdDbgMarkerEnd(VkCmdBuffer cmdBuffer)
1208{
1209 const VkLayerDispatchTable *disp;
1210
1211 disp = loader_get_dispatch(cmdBuffer);
1212
1213 disp->CmdDbgMarkerEnd(cmdBuffer);
1214}
1215
1216LOADER_EXPORT VkResult VKAPI vkGetDisplayInfoWSI(VkDisplayWSI display, VkDisplayInfoTypeWSI infoType, size_t* pDataSize, void* pData)
1217{
Jon Ashburn2666e2f2015-05-15 15:09:35 -06001218 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001219
Jon Ashburn2666e2f2015-05-15 15:09:35 -06001220 disp = loader_get_instance_dispatch(display);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001221
1222 return disp->GetDisplayInfoWSI(display, infoType, pDataSize, pData);
1223}
1224
1225LOADER_EXPORT VkResult VKAPI vkCreateSwapChainWSI(VkDevice device, const VkSwapChainCreateInfoWSI* pCreateInfo, VkSwapChainWSI* pSwapChain)
1226{
1227 const VkLayerDispatchTable *disp;
1228 VkResult res;
1229
1230 disp = loader_get_dispatch(device);
1231
1232 res = disp->CreateSwapChainWSI(device, pCreateInfo, pSwapChain);
1233 if (res == VK_SUCCESS) {
1234 loader_init_dispatch(*pSwapChain, disp);
1235 }
1236
1237 return res;
1238}
1239
1240LOADER_EXPORT VkResult VKAPI vkDestroySwapChainWSI(VkSwapChainWSI swapChain)
1241{
1242 const VkLayerDispatchTable *disp;
1243
1244 disp = loader_get_dispatch(swapChain);
1245
1246 return disp->DestroySwapChainWSI(swapChain);
1247}
1248
1249LOADER_EXPORT VkResult VKAPI vkGetSwapChainInfoWSI(VkSwapChainWSI swapChain, VkSwapChainInfoTypeWSI infoType, size_t* pDataSize, void* pData)
1250{
1251 const VkLayerDispatchTable *disp;
1252
1253 disp = loader_get_dispatch(swapChain);
1254
1255 return disp->GetSwapChainInfoWSI(swapChain, infoType, pDataSize, pData);
1256}
1257
1258LOADER_EXPORT VkResult VKAPI vkQueuePresentWSI(VkQueue queue, const VkPresentInfoWSI* pPresentInfo)
1259{
1260 const VkLayerDispatchTable *disp;
1261
1262 disp = loader_get_dispatch(queue);
1263
1264 return disp->QueuePresentWSI(queue, pPresentInfo);
1265}
Tobin Ehlis3126f012015-05-13 11:57:18 -06001266
1267#if defined(WIN32)
1268#pragma optimize( "", on )
1269#endif