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