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