blob: c5eb01adf2deb7137865a1f3d68c591438cdf440 [file] [log] [blame]
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001/*
2 * Vulkan
3 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
Jon Ashburnfce93d92015-05-12 17:26:48 -060024#include <stdlib.h>
25#include <string.h>
Jon Ashburn2139a3e2015-05-06 09:02:10 -060026
Jon Ashburnfce93d92015-05-12 17:26:48 -060027#include "loader_platform.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060028#include "loader.h"
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060029#include "debug_report.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060030
Tobin Ehlis3126f012015-05-13 11:57:18 -060031#if defined(WIN32)
32// On Windows need to disable global optimization for function entrypoints or
33// else mhook will not be able to hook all of them
34#pragma optimize( "g", off )
35#endif
36
Jon Ashburn2139a3e2015-05-06 09:02:10 -060037/* Trampoline entrypoints */
Jon Ashburnfce93d92015-05-12 17:26:48 -060038LOADER_EXPORT VkResult VKAPI vkCreateInstance(
Courtney Goeltzenleuchter70c4ebc2015-06-08 15:13:50 -060039 const VkInstanceCreateInfo* pCreateInfo,
40 VkInstance* pInstance)
Jon Ashburnfce93d92015-05-12 17:26:48 -060041{
42 struct loader_instance *ptr_instance = NULL;
43
44 VkResult res = VK_ERROR_INITIALIZATION_FAILED;
Jon Ashburnfce93d92015-05-12 17:26:48 -060045
46 /* Scan/discover all ICD libraries in a single-threaded manner */
47 loader_platform_thread_once(&once_icd, loader_icd_scan);
48
49 /* get layer libraries in a single-threaded manner */
50 loader_platform_thread_once(&once_layer, layer_lib_scan);
51
52 /* merge any duplicate extensions */
53 loader_platform_thread_once(&once_exts, loader_coalesce_extensions);
54
55 ptr_instance = (struct loader_instance*) malloc(sizeof(struct loader_instance));
56 if (ptr_instance == NULL) {
57 return VK_ERROR_OUT_OF_HOST_MEMORY;
58 }
Jon Ashburnb40f2562015-05-29 13:15:39 -060059 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -060060 memset(ptr_instance, 0, sizeof(struct loader_instance));
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060061 ptr_instance->app_extension_count = pCreateInfo->extensionCount;
62 ptr_instance->app_extension_props = (ptr_instance->app_extension_count > 0) ?
63 malloc(sizeof (VkExtensionProperties) * ptr_instance->app_extension_count) : NULL;
Jon Ashburnb40f2562015-05-29 13:15:39 -060064 if (ptr_instance->app_extension_props == NULL && (ptr_instance->app_extension_count > 0)) {
65 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -060066 return VK_ERROR_OUT_OF_HOST_MEMORY;
Jon Ashburnb40f2562015-05-29 13:15:39 -060067 }
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060068
69 /*
70 * Make local copy of extension properties indicated by application.
71 */
72 if (ptr_instance->app_extension_props) {
73 memcpy(ptr_instance->app_extension_props,
74 pCreateInfo->pEnabledExtensions,
75 sizeof(VkExtensionProperties) * ptr_instance->app_extension_count);
Jon Ashburnfce93d92015-05-12 17:26:48 -060076 }
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060077
Jon Ashburnbfa43b72015-05-19 14:33:18 -060078 ptr_instance->disp = malloc(sizeof(VkLayerInstanceDispatchTable));
Jon Ashburnb40f2562015-05-29 13:15:39 -060079 if (ptr_instance->disp == NULL) {
80 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnbfa43b72015-05-19 14:33:18 -060081 return VK_ERROR_OUT_OF_HOST_MEMORY;
Jon Ashburnb40f2562015-05-29 13:15:39 -060082 }
Jon Ashburnbfa43b72015-05-19 14:33:18 -060083 memcpy(ptr_instance->disp, &instance_disp, sizeof(instance_disp));
Jon Ashburnfce93d92015-05-12 17:26:48 -060084 ptr_instance->next = loader.instances;
85 loader.instances = ptr_instance;
Jon Ashburncedc15f2015-05-21 18:13:33 -060086
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060087 loader_enable_instance_layers(ptr_instance);
88
89 debug_report_create_instance(ptr_instance);
Jon Ashburncedc15f2015-05-21 18:13:33 -060090
91 /* enable any layers on instance chain */
Jon Ashburnfce93d92015-05-12 17:26:48 -060092 loader_activate_instance_layers(ptr_instance);
93
Jon Ashburnfce93d92015-05-12 17:26:48 -060094 *pInstance = (VkInstance) ptr_instance;
Jon Ashburna179dcf2015-05-21 17:42:17 -060095
96 res = ptr_instance->disp->CreateInstance(pCreateInfo, pInstance);
97
Courtney Goeltzenleuchter23b5f8d2015-06-17 20:51:59 -060098 /*
99 * Finally have the layers in place and everyone has seen
100 * the CreateInstance command go by. This allows the layer's
101 * GetInstanceProcAddr functions to return valid extension functions
102 * if enabled.
103 */
104 loader_activate_instance_layer_extensions(ptr_instance);
105
Jon Ashburnb40f2562015-05-29 13:15:39 -0600106 loader_platform_thread_unlock_mutex(&loader_lock);
107
Jon Ashburnfce93d92015-05-12 17:26:48 -0600108 return res;
109}
110
111LOADER_EXPORT VkResult VKAPI vkDestroyInstance(
112 VkInstance instance)
113{
114 const VkLayerInstanceDispatchTable *disp;
Jon Ashburnb40f2562015-05-29 13:15:39 -0600115 VkResult res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600116 disp = loader_get_instance_dispatch(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600117
Jon Ashburnb40f2562015-05-29 13:15:39 -0600118 loader_platform_thread_lock_mutex(&loader_lock);
119
120 res = disp->DestroyInstance(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600121
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600122 struct loader_instance *ptr_instance = loader_instance(instance);
123 loader_deactivate_instance_layers(ptr_instance);
124 loader_destroy_ext_list(&ptr_instance->enabled_instance_extensions);
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600125
126 free(ptr_instance);
127
Jon Ashburnb40f2562015-05-29 13:15:39 -0600128 loader_platform_thread_unlock_mutex(&loader_lock);
129
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600130 return res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600131}
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600132
Jon Ashburnfce93d92015-05-12 17:26:48 -0600133LOADER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
134 VkInstance instance,
135 uint32_t* pPhysicalDeviceCount,
136 VkPhysicalDevice* pPhysicalDevices)
137{
138 const VkLayerInstanceDispatchTable *disp;
Jon Ashburnb40f2562015-05-29 13:15:39 -0600139 VkResult res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600140 disp = loader_get_instance_dispatch(instance);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600141
142 loader_platform_thread_lock_mutex(&loader_lock);
143 res = disp->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount,
Jon Ashburnfce93d92015-05-12 17:26:48 -0600144 pPhysicalDevices);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600145 loader_platform_thread_unlock_mutex(&loader_lock);
146 return res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600147}
148
149LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceInfo(
150 VkPhysicalDevice gpu,
151 VkPhysicalDeviceInfoType infoType,
152 size_t* pDataSize,
153 void* pData)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600154{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600155 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600156 VkResult res;
157
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600158 disp = loader_get_instance_dispatch(gpu);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600159
Jon Ashburnb40f2562015-05-29 13:15:39 -0600160 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600161 res = disp->GetPhysicalDeviceInfo(gpu, infoType, pDataSize, pData);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600162 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600163
164 return res;
165}
166
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600167LOADER_EXPORT VkResult VKAPI vkCreateDevice(
168 VkPhysicalDevice gpu,
169 const VkDeviceCreateInfo* pCreateInfo,
170 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600171{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600172 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600173 VkResult res;
174
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600175 disp = loader_get_instance_dispatch(gpu);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600176
Jon Ashburnb40f2562015-05-29 13:15:39 -0600177 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600178 // CreateDevice is dispatched on the instance chain
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600179 res = disp->CreateDevice(gpu, pCreateInfo, pDevice);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600180 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600181 return res;
182}
183
184LOADER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
185{
186 const VkLayerDispatchTable *disp;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600187 VkResult res;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600188
189 disp = loader_get_dispatch(device);
190
Jon Ashburnb40f2562015-05-29 13:15:39 -0600191 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600192 res = disp->DestroyDevice(device);
Jon Ashburncb5a5ac2015-06-10 10:06:06 -0600193 loader_remove_logical_device(device);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600194 loader_platform_thread_unlock_mutex(&loader_lock);
195 return res;
196}
197
198LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionInfo(
199 VkPhysicalDevice gpu,
200 VkExtensionInfoType infoType,
201 uint32_t extensionIndex,
202 size_t* pDataSize,
203 void* pData)
204{
205 VkResult res;
206
207 loader_platform_thread_lock_mutex(&loader_lock);
208 res = loader_GetPhysicalDeviceExtensionInfo(gpu, infoType, extensionIndex, pDataSize, pData);
209 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600210 return res;
211}
212
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600213LOADER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
214{
215 const VkLayerDispatchTable *disp;
216 VkResult res;
217
218 disp = loader_get_dispatch(device);
219
220 res = disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
221 if (res == VK_SUCCESS) {
222 loader_set_dispatch(*pQueue, disp);
223 }
224
225 return res;
226}
227
228LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
229{
230 const VkLayerDispatchTable *disp;
231
232 disp = loader_get_dispatch(queue);
233
234 return disp->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
235}
236
237LOADER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
238{
239 const VkLayerDispatchTable *disp;
240
241 disp = loader_get_dispatch(queue);
242
243 return disp->QueueWaitIdle(queue);
244}
245
246LOADER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
247{
248 const VkLayerDispatchTable *disp;
249
250 disp = loader_get_dispatch(device);
251
252 return disp->DeviceWaitIdle(device);
253}
254
255LOADER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem)
256{
257 const VkLayerDispatchTable *disp;
258
259 disp = loader_get_dispatch(device);
260
261 return disp->AllocMemory(device, pAllocInfo, pMem);
262}
263
264LOADER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
265{
266 const VkLayerDispatchTable *disp;
267
268 disp = loader_get_dispatch(device);
269
270 return disp->FreeMemory(device, mem);
271}
272
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600273LOADER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
274{
275 const VkLayerDispatchTable *disp;
276
277 disp = loader_get_dispatch(device);
278
279 return disp->MapMemory(device, mem, offset, size, flags, ppData);
280}
281
282LOADER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
283{
284 const VkLayerDispatchTable *disp;
285
286 disp = loader_get_dispatch(device);
287
288 return disp->UnmapMemory(device, mem);
289}
290
291LOADER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
292{
293 const VkLayerDispatchTable *disp;
294
295 disp = loader_get_dispatch(device);
296
297 return disp->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
298}
299
300LOADER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
301{
302 const VkLayerDispatchTable *disp;
303
304 disp = loader_get_dispatch(device);
305
306 return disp->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
307}
308
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600309LOADER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
310{
311 const VkLayerDispatchTable *disp;
312
313 disp = loader_get_dispatch(device);
314
315 return disp->DestroyObject(device, objType, object);
316}
317
318LOADER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType objType, VkObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
319{
320 const VkLayerDispatchTable *disp;
321
322 disp = loader_get_dispatch(device);
323
324 return disp->GetObjectInfo(device, objType, object, infoType, pDataSize, pData);
325}
326
Mark Lobodzinski23182612015-05-29 09:32:35 -0500327LOADER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600328{
329 const VkLayerDispatchTable *disp;
330
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500331 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600332
Mark Lobodzinski23182612015-05-29 09:32:35 -0500333 return disp->BindObjectMemory(device, objType, object, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600334}
335
Mark Lobodzinski23182612015-05-29 09:32:35 -0500336LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600337{
338 const VkLayerDispatchTable *disp;
339
340 disp = loader_get_dispatch(queue);
341
Mark Lobodzinski23182612015-05-29 09:32:35 -0500342 return disp->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600343}
344
Mark Lobodzinski23182612015-05-29 09:32:35 -0500345LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600346{
347 const VkLayerDispatchTable *disp;
348
349 disp = loader_get_dispatch(queue);
350
Mark Lobodzinski23182612015-05-29 09:32:35 -0500351 return disp->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600352}
353
354LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
355{
356 const VkLayerDispatchTable *disp;
357
358 disp = loader_get_dispatch(device);
359
360 return disp->CreateFence(device, pCreateInfo, pFence);
361}
362
363LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, VkFence* pFences)
364{
365 const VkLayerDispatchTable *disp;
366
367 disp = loader_get_dispatch(device);
368
369 return disp->ResetFences(device, fenceCount, pFences);
370}
371
372LOADER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
373{
374 const VkLayerDispatchTable *disp;
375
376 disp = loader_get_dispatch(device);
377
378 return disp->GetFenceStatus(device, fence);
379}
380
381LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout)
382{
383 const VkLayerDispatchTable *disp;
384
385 disp = loader_get_dispatch(device);
386
387 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
388}
389
390LOADER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
391{
392 const VkLayerDispatchTable *disp;
393
394 disp = loader_get_dispatch(device);
395
396 return disp->CreateSemaphore(device, pCreateInfo, pSemaphore);
397}
398
399LOADER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
400{
401 const VkLayerDispatchTable *disp;
402
403 disp = loader_get_dispatch(queue);
404
405 return disp->QueueSignalSemaphore(queue, semaphore);
406}
407
408LOADER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
409{
410 const VkLayerDispatchTable *disp;
411
412 disp = loader_get_dispatch(queue);
413
414 return disp->QueueWaitSemaphore(queue, semaphore);
415}
416
417LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
418{
419 const VkLayerDispatchTable *disp;
420
421 disp = loader_get_dispatch(device);
422
423 return disp->CreateEvent(device, pCreateInfo, pEvent);
424}
425
426LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
427{
428 const VkLayerDispatchTable *disp;
429
430 disp = loader_get_dispatch(device);
431
432 return disp->GetEventStatus(device, event);
433}
434
435LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
436{
437 const VkLayerDispatchTable *disp;
438
439 disp = loader_get_dispatch(device);
440
441 return disp->SetEvent(device, event);
442}
443
444LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
445{
446 const VkLayerDispatchTable *disp;
447
448 disp = loader_get_dispatch(device);
449
450 return disp->ResetEvent(device, event);
451}
452
453LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
454{
455 const VkLayerDispatchTable *disp;
456
457 disp = loader_get_dispatch(device);
458
459 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool);
460}
461
462LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
463{
464 const VkLayerDispatchTable *disp;
465
466 disp = loader_get_dispatch(device);
467
468 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
469}
470
471LOADER_EXPORT VkResult VKAPI vkGetFormatInfo(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData)
472{
473 const VkLayerDispatchTable *disp;
474
475 disp = loader_get_dispatch(device);
476
477 return disp->GetFormatInfo(device, format, infoType, pDataSize, pData);
478}
479
480LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
481{
482 const VkLayerDispatchTable *disp;
483
484 disp = loader_get_dispatch(device);
485
486 return disp->CreateBuffer(device, pCreateInfo, pBuffer);
487}
488
489LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
490{
491 const VkLayerDispatchTable *disp;
492
493 disp = loader_get_dispatch(device);
494
495 return disp->CreateBufferView(device, pCreateInfo, pView);
496}
497
498LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
499{
500 const VkLayerDispatchTable *disp;
501
502 disp = loader_get_dispatch(device);
503
504 return disp->CreateImage(device, pCreateInfo, pImage);
505}
506
507LOADER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
508{
509 const VkLayerDispatchTable *disp;
510
511 disp = loader_get_dispatch(device);
512
513 return disp->GetImageSubresourceInfo(device, image, pSubresource, infoType, pDataSize, pData);
514}
515
516LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
517{
518 const VkLayerDispatchTable *disp;
519
520 disp = loader_get_dispatch(device);
521
522 return disp->CreateImageView(device, pCreateInfo, pView);
523}
524
525LOADER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
526{
527 const VkLayerDispatchTable *disp;
528
529 disp = loader_get_dispatch(device);
530
531 return disp->CreateColorAttachmentView(device, pCreateInfo, pView);
532}
533
534LOADER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
535{
536 const VkLayerDispatchTable *disp;
537
538 disp = loader_get_dispatch(device);
539
540 return disp->CreateDepthStencilView(device, pCreateInfo, pView);
541}
542
543LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
544{
545 const VkLayerDispatchTable *disp;
546
547 disp = loader_get_dispatch(device);
548
549 return disp->CreateShader(device, pCreateInfo, pShader);
550}
551
552LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
553{
554 const VkLayerDispatchTable *disp;
555
556 disp = loader_get_dispatch(device);
557
558 return disp->CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
559}
560
561LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
562{
563 const VkLayerDispatchTable *disp;
564
565 disp = loader_get_dispatch(device);
566
567 return disp->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
568}
569
570LOADER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
571{
572 const VkLayerDispatchTable *disp;
573
574 disp = loader_get_dispatch(device);
575
576 return disp->CreateComputePipeline(device, pCreateInfo, pPipeline);
577}
578
579LOADER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
580{
581 const VkLayerDispatchTable *disp;
582
583 disp = loader_get_dispatch(device);
584
585 return disp->StorePipeline(device, pipeline, pDataSize, pData);
586}
587
588LOADER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
589{
590 const VkLayerDispatchTable *disp;
591
592 disp = loader_get_dispatch(device);
593
594 return disp->LoadPipeline(device, dataSize, pData, pPipeline);
595}
596
597LOADER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
598{
599 const VkLayerDispatchTable *disp;
600
601 disp = loader_get_dispatch(device);
602
603 return disp->LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
604}
605
606LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
607{
608 const VkLayerDispatchTable *disp;
609
610 disp = loader_get_dispatch(device);
611
612 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
613}
614
615LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
616{
617 const VkLayerDispatchTable *disp;
618
619 disp = loader_get_dispatch(device);
620
621 return disp->CreateSampler(device, pCreateInfo, pSampler);
622}
623
624LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
625{
626 const VkLayerDispatchTable *disp;
627
628 disp = loader_get_dispatch(device);
629
630 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
631}
632
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600633LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
634{
635 const VkLayerDispatchTable *disp;
636
637 disp = loader_get_dispatch(device);
638
639 return disp->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
640}
641
642LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
643{
644 const VkLayerDispatchTable *disp;
645
646 disp = loader_get_dispatch(device);
647
648 return disp->ResetDescriptorPool(device, descriptorPool);
649}
650
651LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
652{
653 const VkLayerDispatchTable *disp;
654
655 disp = loader_get_dispatch(device);
656
657 return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
658}
659
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800660LOADER_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 -0600661{
662 const VkLayerDispatchTable *disp;
663
664 disp = loader_get_dispatch(device);
665
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800666 return disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600667}
668
669LOADER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
670{
671 const VkLayerDispatchTable *disp;
672
673 disp = loader_get_dispatch(device);
674
675 return disp->CreateDynamicViewportState(device, pCreateInfo, pState);
676}
677
678LOADER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
679{
680 const VkLayerDispatchTable *disp;
681
682 disp = loader_get_dispatch(device);
683
684 return disp->CreateDynamicRasterState(device, pCreateInfo, pState);
685}
686
687LOADER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
688{
689 const VkLayerDispatchTable *disp;
690
691 disp = loader_get_dispatch(device);
692
693 return disp->CreateDynamicColorBlendState(device, pCreateInfo, pState);
694}
695
696LOADER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
697{
698 const VkLayerDispatchTable *disp;
699
700 disp = loader_get_dispatch(device);
701
702 return disp->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
703}
704
705LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
706{
707 const VkLayerDispatchTable *disp;
708 VkResult res;
709
710 disp = loader_get_dispatch(device);
711
712 res = disp->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
713 if (res == VK_SUCCESS) {
714 loader_init_dispatch(*pCmdBuffer, disp);
715 }
716
717 return res;
718}
719
720LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
721{
722 const VkLayerDispatchTable *disp;
723
724 disp = loader_get_dispatch(cmdBuffer);
725
726 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo);
727}
728
729LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
730{
731 const VkLayerDispatchTable *disp;
732
733 disp = loader_get_dispatch(cmdBuffer);
734
735 return disp->EndCommandBuffer(cmdBuffer);
736}
737
738LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
739{
740 const VkLayerDispatchTable *disp;
741
742 disp = loader_get_dispatch(cmdBuffer);
743
744 return disp->ResetCommandBuffer(cmdBuffer);
745}
746
747LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
748{
749 const VkLayerDispatchTable *disp;
750
751 disp = loader_get_dispatch(cmdBuffer);
752
753 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
754}
755
756LOADER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
757{
758 const VkLayerDispatchTable *disp;
759
760 disp = loader_get_dispatch(cmdBuffer);
761
762 disp->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
763}
764
Mark Lobodzinskia65c4632015-06-15 13:21:21 -0600765LOADER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600766{
767 const VkLayerDispatchTable *disp;
768
769 disp = loader_get_dispatch(cmdBuffer);
770
Mark Lobodzinskia65c4632015-06-15 13:21:21 -0600771 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600772}
773
774LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
775{
776 const VkLayerDispatchTable *disp;
777
778 disp = loader_get_dispatch(cmdBuffer);
779
780 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
781}
782
783LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
784{
785 const VkLayerDispatchTable *disp;
786
787 disp = loader_get_dispatch(cmdBuffer);
788
789 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
790}
791
792LOADER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
793{
794 const VkLayerDispatchTable *disp;
795
796 disp = loader_get_dispatch(cmdBuffer);
797
798 disp->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
799}
800
801LOADER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
802{
803 const VkLayerDispatchTable *disp;
804
805 disp = loader_get_dispatch(cmdBuffer);
806
807 disp->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
808}
809
810LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
811{
812 const VkLayerDispatchTable *disp;
813
814 disp = loader_get_dispatch(cmdBuffer);
815
816 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
817}
818
819LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
820{
821 const VkLayerDispatchTable *disp;
822
823 disp = loader_get_dispatch(cmdBuffer);
824
825 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
826}
827
828LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
829{
830 const VkLayerDispatchTable *disp;
831
832 disp = loader_get_dispatch(cmdBuffer);
833
834 disp->CmdDispatch(cmdBuffer, x, y, z);
835}
836
837LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
838{
839 const VkLayerDispatchTable *disp;
840
841 disp = loader_get_dispatch(cmdBuffer);
842
843 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset);
844}
845
846LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
847{
848 const VkLayerDispatchTable *disp;
849
850 disp = loader_get_dispatch(cmdBuffer);
851
852 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
853}
854
855LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
856{
857 const VkLayerDispatchTable *disp;
858
859 disp = loader_get_dispatch(cmdBuffer);
860
861 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
862}
863
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500864LOADER_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 -0600865{
866 const VkLayerDispatchTable *disp;
867
868 disp = loader_get_dispatch(cmdBuffer);
869
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500870 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600871}
872
873LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
874{
875 const VkLayerDispatchTable *disp;
876
877 disp = loader_get_dispatch(cmdBuffer);
878
879 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
880}
881
882LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
883{
884 const VkLayerDispatchTable *disp;
885
886 disp = loader_get_dispatch(cmdBuffer);
887
888 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
889}
890
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600891LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
892{
893 const VkLayerDispatchTable *disp;
894
895 disp = loader_get_dispatch(cmdBuffer);
896
897 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
898}
899
900LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
901{
902 const VkLayerDispatchTable *disp;
903
904 disp = loader_get_dispatch(cmdBuffer);
905
906 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
907}
908
909LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
910{
911 const VkLayerDispatchTable *disp;
912
913 disp = loader_get_dispatch(cmdBuffer);
914
915 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
916}
917
918LOADER_EXPORT void VKAPI vkCmdClearDepthStencil(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
919{
920 const VkLayerDispatchTable *disp;
921
922 disp = loader_get_dispatch(cmdBuffer);
923
924 disp->CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
925}
926
927LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
928{
929 const VkLayerDispatchTable *disp;
930
931 disp = loader_get_dispatch(cmdBuffer);
932
933 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
934}
935
936LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
937{
938 const VkLayerDispatchTable *disp;
939
940 disp = loader_get_dispatch(cmdBuffer);
941
942 disp->CmdSetEvent(cmdBuffer, event, pipeEvent);
943}
944
945LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
946{
947 const VkLayerDispatchTable *disp;
948
949 disp = loader_get_dispatch(cmdBuffer);
950
951 disp->CmdResetEvent(cmdBuffer, event, pipeEvent);
952}
953
954LOADER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t eventCount, const VkEvent* pEvents, uint32_t memBarrierCount, const void** ppMemBarriers)
955{
956 const VkLayerDispatchTable *disp;
957
958 disp = loader_get_dispatch(cmdBuffer);
959
960 disp->CmdWaitEvents(cmdBuffer, waitEvent, eventCount, pEvents, memBarrierCount, ppMemBarriers);
961}
962
963LOADER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t pipeEventCount, const VkPipeEvent* pPipeEvents, uint32_t memBarrierCount, const void** ppMemBarriers)
964{
965 const VkLayerDispatchTable *disp;
966
967 disp = loader_get_dispatch(cmdBuffer);
968
969 disp->CmdPipelineBarrier(cmdBuffer, waitEvent, pipeEventCount, pPipeEvents, memBarrierCount, ppMemBarriers);
970}
971
972LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
973{
974 const VkLayerDispatchTable *disp;
975
976 disp = loader_get_dispatch(cmdBuffer);
977
978 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
979}
980
981LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
982{
983 const VkLayerDispatchTable *disp;
984
985 disp = loader_get_dispatch(cmdBuffer);
986
987 disp->CmdEndQuery(cmdBuffer, queryPool, slot);
988}
989
990LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
991{
992 const VkLayerDispatchTable *disp;
993
994 disp = loader_get_dispatch(cmdBuffer);
995
996 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
997}
998
999LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset)
1000{
1001 const VkLayerDispatchTable *disp;
1002
1003 disp = loader_get_dispatch(cmdBuffer);
1004
1005 disp->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1006}
1007
1008LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkFlags flags)
1009{
1010 const VkLayerDispatchTable *disp;
1011
1012 disp = loader_get_dispatch(cmdBuffer);
1013
1014 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
1015}
1016
1017LOADER_EXPORT void VKAPI vkCmdInitAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData)
1018{
1019 const VkLayerDispatchTable *disp;
1020
1021 disp = loader_get_dispatch(cmdBuffer);
1022
1023 disp->CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData);
1024}
1025
1026LOADER_EXPORT void VKAPI vkCmdLoadAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer srcBuffer, VkDeviceSize srcOffset)
1027{
1028 const VkLayerDispatchTable *disp;
1029
1030 disp = loader_get_dispatch(cmdBuffer);
1031
1032 disp->CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset);
1033}
1034
1035LOADER_EXPORT void VKAPI vkCmdSaveAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer destBuffer, VkDeviceSize destOffset)
1036{
1037 const VkLayerDispatchTable *disp;
1038
1039 disp = loader_get_dispatch(cmdBuffer);
1040
1041 disp->CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset);
1042}
1043
1044LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
1045{
1046 const VkLayerDispatchTable *disp;
1047
1048 disp = loader_get_dispatch(device);
1049
1050 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
1051}
1052
1053LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
1054{
1055 const VkLayerDispatchTable *disp;
1056
1057 disp = loader_get_dispatch(device);
1058
1059 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass);
1060}
1061
1062LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
1063{
1064 const VkLayerDispatchTable *disp;
1065
1066 disp = loader_get_dispatch(cmdBuffer);
1067
1068 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1069}
1070
1071LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass)
1072{
1073 const VkLayerDispatchTable *disp;
1074
1075 disp = loader_get_dispatch(cmdBuffer);
1076
1077 disp->CmdEndRenderPass(cmdBuffer, renderPass);
1078}