blob: b3df9bd3d9e6647d025eaad8b2a12857be829cb4 [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 */
Courtney Goeltzenleuchterb620ace2015-07-05 11:28:29 -060024#define _GNU_SOURCE
Jon Ashburnfce93d92015-05-12 17:26:48 -060025#include <stdlib.h>
26#include <string.h>
Jon Ashburn2139a3e2015-05-06 09:02:10 -060027
Tobin Ehlis7a51d902015-07-03 10:34:49 -060028#include "vk_loader_platform.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060029#include "loader.h"
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060030#include "debug_report.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060031
Tobin Ehlis3126f012015-05-13 11:57:18 -060032#if defined(WIN32)
33// On Windows need to disable global optimization for function entrypoints or
34// else mhook will not be able to hook all of them
35#pragma optimize( "g", off )
36#endif
37
Jon Ashburn2139a3e2015-05-06 09:02:10 -060038/* Trampoline entrypoints */
Jon Ashburnfce93d92015-05-12 17:26:48 -060039LOADER_EXPORT VkResult VKAPI vkCreateInstance(
Courtney Goeltzenleuchter70c4ebc2015-06-08 15:13:50 -060040 const VkInstanceCreateInfo* pCreateInfo,
41 VkInstance* pInstance)
Jon Ashburnfce93d92015-05-12 17:26:48 -060042{
43 struct loader_instance *ptr_instance = NULL;
44
45 VkResult res = VK_ERROR_INITIALIZATION_FAILED;
Jon Ashburnfce93d92015-05-12 17:26:48 -060046
47 /* Scan/discover all ICD libraries in a single-threaded manner */
48 loader_platform_thread_once(&once_icd, loader_icd_scan);
49
50 /* get layer libraries in a single-threaded manner */
Jon Ashburn68a63922015-07-02 09:40:15 -060051 loader_platform_thread_once(&once_layer, loader_layer_scan);
Jon Ashburnfce93d92015-05-12 17:26:48 -060052
53 /* merge any duplicate extensions */
54 loader_platform_thread_once(&once_exts, loader_coalesce_extensions);
55
Courtney Goeltzenleuchter5d9f29b2015-07-06 17:45:08 -060056 res = loader_validate_instance_layers(pCreateInfo);
57 if (res != VK_SUCCESS) {
58 return res;
59 }
60
61 res = loader_validate_instance_extensions(pCreateInfo);
62 if (res != VK_SUCCESS) {
63 return res;
64 }
65
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060066 if (pCreateInfo->pAllocCb
67 && pCreateInfo->pAllocCb->pfnAlloc
68 && pCreateInfo->pAllocCb->pfnFree) {
69 ptr_instance = (struct loader_instance *) pCreateInfo->pAllocCb->pfnAlloc(
70 pCreateInfo->pAllocCb->pUserData,
71 sizeof(struct loader_instance),
72 sizeof(VkInstance),
73 VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
74 } else {
75 ptr_instance = (struct loader_instance *) malloc(sizeof(struct loader_instance));
76 }
Jon Ashburnfce93d92015-05-12 17:26:48 -060077 if (ptr_instance == NULL) {
78 return VK_ERROR_OUT_OF_HOST_MEMORY;
79 }
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060080
Jon Ashburnfce93d92015-05-12 17:26:48 -060081 memset(ptr_instance, 0, sizeof(struct loader_instance));
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -060082
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060083 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburncedc15f2015-05-21 18:13:33 -060084
Courtney Goeltzenleuchterb620ace2015-07-05 11:28:29 -060085 if (pCreateInfo->pAllocCb
86 && pCreateInfo->pAllocCb->pfnAlloc
87 && pCreateInfo->pAllocCb->pfnFree) {
88 ptr_instance->alloc_callbacks.pUserData = pCreateInfo->pAllocCb->pUserData;
89 ptr_instance->alloc_callbacks.pfnAlloc = pCreateInfo->pAllocCb->pfnAlloc;
90 ptr_instance->alloc_callbacks.pfnFree = pCreateInfo->pAllocCb->pfnFree;
91 }
92
Courtney Goeltzenleuchter1381cd12015-07-06 09:08:37 -060093 ptr_instance->disp = loader_heap_alloc(
94 ptr_instance,
95 sizeof(VkLayerInstanceDispatchTable),
96 VK_SYSTEM_ALLOC_TYPE_INTERNAL);
97 if (ptr_instance->disp == NULL) {
98 loader_platform_thread_unlock_mutex(&loader_lock);
99 return VK_ERROR_OUT_OF_HOST_MEMORY;
100 }
101 memcpy(ptr_instance->disp, &instance_disp, sizeof(instance_disp));
102 ptr_instance->next = loader.instances;
103 loader.instances = ptr_instance;
104
105 res = loader_enable_instance_layers(ptr_instance, pCreateInfo);
106 if (res != VK_SUCCESS) {
107 loader_heap_free(ptr_instance, ptr_instance->disp);
108 loader_heap_free(ptr_instance, ptr_instance);
109 return res;
110 }
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600111
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600112 debug_report_create_instance(ptr_instance, pCreateInfo);
Jon Ashburncedc15f2015-05-21 18:13:33 -0600113
114 /* enable any layers on instance chain */
Jon Ashburnfce93d92015-05-12 17:26:48 -0600115 loader_activate_instance_layers(ptr_instance);
116
Jon Ashburnfce93d92015-05-12 17:26:48 -0600117 *pInstance = (VkInstance) ptr_instance;
Jon Ashburna179dcf2015-05-21 17:42:17 -0600118
119 res = ptr_instance->disp->CreateInstance(pCreateInfo, pInstance);
120
Courtney Goeltzenleuchter23b5f8d2015-06-17 20:51:59 -0600121 /*
122 * Finally have the layers in place and everyone has seen
123 * the CreateInstance command go by. This allows the layer's
124 * GetInstanceProcAddr functions to return valid extension functions
125 * if enabled.
126 */
127 loader_activate_instance_layer_extensions(ptr_instance);
128
Jon Ashburnb40f2562015-05-29 13:15:39 -0600129 loader_platform_thread_unlock_mutex(&loader_lock);
130
Jon Ashburnfce93d92015-05-12 17:26:48 -0600131 return res;
132}
133
134LOADER_EXPORT VkResult VKAPI vkDestroyInstance(
135 VkInstance instance)
136{
137 const VkLayerInstanceDispatchTable *disp;
Jon Ashburnb40f2562015-05-29 13:15:39 -0600138 VkResult res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600139 disp = loader_get_instance_dispatch(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600140
Jon Ashburnb40f2562015-05-29 13:15:39 -0600141 loader_platform_thread_lock_mutex(&loader_lock);
142
143 res = disp->DestroyInstance(instance);
Courtney Goeltzenleuchter1c7c65d2015-06-10 17:39:03 -0600144
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600145 struct loader_instance *ptr_instance = loader_instance(instance);
146 loader_deactivate_instance_layers(ptr_instance);
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600147
148 free(ptr_instance);
149
Jon Ashburnb40f2562015-05-29 13:15:39 -0600150 loader_platform_thread_unlock_mutex(&loader_lock);
151
Courtney Goeltzenleuchter3d8dc1f2015-06-08 15:09:22 -0600152 return res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600153}
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600154
Jon Ashburnfce93d92015-05-12 17:26:48 -0600155LOADER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
156 VkInstance instance,
157 uint32_t* pPhysicalDeviceCount,
158 VkPhysicalDevice* pPhysicalDevices)
159{
160 const VkLayerInstanceDispatchTable *disp;
Jon Ashburnb40f2562015-05-29 13:15:39 -0600161 VkResult res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600162 disp = loader_get_instance_dispatch(instance);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600163
164 loader_platform_thread_lock_mutex(&loader_lock);
165 res = disp->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount,
Jon Ashburnfce93d92015-05-12 17:26:48 -0600166 pPhysicalDevices);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600167 loader_platform_thread_unlock_mutex(&loader_lock);
168 return res;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600169}
170
Tony Barbour426b9052015-06-24 16:06:58 -0600171LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
Jon Ashburnfce93d92015-05-12 17:26:48 -0600172 VkPhysicalDevice gpu,
Tony Barbour426b9052015-06-24 16:06:58 -0600173 VkPhysicalDeviceProperties* pProperties)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600174{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600175 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600176 VkResult res;
177
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600178 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600179 res = disp->GetPhysicalDeviceProperties(gpu, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600180 return res;
181}
182
183LOADER_EXPORT VkResult VKAPI vkGetPhysicalDevicePerformance(
184 VkPhysicalDevice gpu,
185 VkPhysicalDevicePerformance* pPerformance)
186{
187 const VkLayerInstanceDispatchTable *disp;
188 VkResult res;
189
190 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600191 res = disp->GetPhysicalDevicePerformance(gpu, pPerformance);
Tony Barbour426b9052015-06-24 16:06:58 -0600192 return res;
193}
194
195LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueCount(
196 VkPhysicalDevice gpu,
197 uint32_t* pCount)
198{
199 const VkLayerInstanceDispatchTable *disp;
200 VkResult res;
201
202 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600203 res = disp->GetPhysicalDeviceQueueCount(gpu, pCount);
Tony Barbour426b9052015-06-24 16:06:58 -0600204 return res;
205}
206
207LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
208 VkPhysicalDevice gpu,
209 uint32_t count,
210 VkPhysicalDeviceQueueProperties* pQueueProperties)
211{
212 const VkLayerInstanceDispatchTable *disp;
213 VkResult res;
214
215 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600216 res = disp->GetPhysicalDeviceQueueProperties(gpu, count, pQueueProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600217 return res;
218}
219
220LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
221 VkPhysicalDevice gpu,
222 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
223{
224 const VkLayerInstanceDispatchTable *disp;
225 VkResult res;
226
227 disp = loader_get_instance_dispatch(gpu);
Tony Barbour426b9052015-06-24 16:06:58 -0600228 res = disp->GetPhysicalDeviceMemoryProperties(gpu, pMemoryProperties);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600229 return res;
230}
231
Chris Forbesd7576302015-06-21 22:55:02 +1200232LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
233 VkPhysicalDevice gpu,
234 VkPhysicalDeviceFeatures *pFeatures)
235{
236 const VkLayerInstanceDispatchTable *disp;
237 VkResult res;
238
239 disp = loader_get_instance_dispatch(gpu);
Chris Forbesd7576302015-06-21 22:55:02 +1200240 res = disp->GetPhysicalDeviceFeatures(gpu, pFeatures);
Chris Forbesd7576302015-06-21 22:55:02 +1200241 return res;
242}
243
244LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatInfo(
245 VkPhysicalDevice gpu,
246 VkFormat format,
247 VkFormatProperties *pFormatInfo)
248{
249 const VkLayerInstanceDispatchTable *disp;
250 VkResult res;
251
252 disp = loader_get_instance_dispatch(gpu);
Chris Forbesd7576302015-06-21 22:55:02 +1200253 res = disp->GetPhysicalDeviceFormatInfo(gpu, format, pFormatInfo);
Chris Forbesd7576302015-06-21 22:55:02 +1200254 return res;
255}
256
257LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
258 VkPhysicalDevice gpu,
259 VkPhysicalDeviceLimits *pLimits)
260{
261 const VkLayerInstanceDispatchTable *disp;
262 VkResult res;
263
264 disp = loader_get_instance_dispatch(gpu);
Chris Forbesd7576302015-06-21 22:55:02 +1200265 res = disp->GetPhysicalDeviceLimits(gpu, pLimits);
Chris Forbesd7576302015-06-21 22:55:02 +1200266 return res;
267}
268
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600269LOADER_EXPORT VkResult VKAPI vkCreateDevice(
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600270 VkPhysicalDevice gpu,
271 const VkDeviceCreateInfo* pCreateInfo,
272 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600273{
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600274 VkResult res;
275
Jon Ashburnb40f2562015-05-29 13:15:39 -0600276 loader_platform_thread_lock_mutex(&loader_lock);
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600277
278 res = loader_CreateDevice(gpu, pCreateInfo, pDevice);
279
Jon Ashburnb40f2562015-05-29 13:15:39 -0600280 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600281 return res;
282}
283
284LOADER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
285{
286 const VkLayerDispatchTable *disp;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600287 VkResult res;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600288
289 disp = loader_get_dispatch(device);
290
Jon Ashburnb40f2562015-05-29 13:15:39 -0600291 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600292 res = disp->DestroyDevice(device);
Jon Ashburncb5a5ac2015-06-10 10:06:06 -0600293 loader_remove_logical_device(device);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600294 loader_platform_thread_unlock_mutex(&loader_lock);
295 return res;
296}
297
Tony Barbour426b9052015-06-24 16:06:58 -0600298LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600299 VkPhysicalDevice physicalDevice,
300 const char* pLayerName,
301 uint32_t* pCount,
302 VkExtensionProperties* pProperties)
Jon Ashburnb40f2562015-05-29 13:15:39 -0600303{
304 VkResult res;
305
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600306 loader_platform_thread_lock_mutex(&loader_lock);
307 res = loader_GetPhysicalDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties);
308 loader_platform_thread_unlock_mutex(&loader_lock);
Tony Barbour426b9052015-06-24 16:06:58 -0600309 return res;
310}
311
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600312LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
313 VkPhysicalDevice physicalDevice,
314 uint32_t* pCount,
315 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600316{
317 VkResult res;
318
Courtney Goeltzenleuchter18061cd2015-06-29 15:39:26 -0600319 loader_platform_thread_lock_mutex(&loader_lock);
320 res = loader_GetPhysicalDeviceLayerProperties(physicalDevice, pCount, pProperties);
321 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600322 return res;
323}
324
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600325LOADER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
326{
327 const VkLayerDispatchTable *disp;
328 VkResult res;
329
330 disp = loader_get_dispatch(device);
331
332 res = disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
333 if (res == VK_SUCCESS) {
334 loader_set_dispatch(*pQueue, disp);
335 }
336
337 return res;
338}
339
340LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
341{
342 const VkLayerDispatchTable *disp;
343
344 disp = loader_get_dispatch(queue);
345
346 return disp->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
347}
348
349LOADER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
350{
351 const VkLayerDispatchTable *disp;
352
353 disp = loader_get_dispatch(queue);
354
355 return disp->QueueWaitIdle(queue);
356}
357
358LOADER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
359{
360 const VkLayerDispatchTable *disp;
361
362 disp = loader_get_dispatch(device);
363
364 return disp->DeviceWaitIdle(device);
365}
366
367LOADER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem)
368{
369 const VkLayerDispatchTable *disp;
370
371 disp = loader_get_dispatch(device);
372
373 return disp->AllocMemory(device, pAllocInfo, pMem);
374}
375
376LOADER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
377{
378 const VkLayerDispatchTable *disp;
379
380 disp = loader_get_dispatch(device);
381
382 return disp->FreeMemory(device, mem);
383}
384
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600385LOADER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
386{
387 const VkLayerDispatchTable *disp;
388
389 disp = loader_get_dispatch(device);
390
391 return disp->MapMemory(device, mem, offset, size, flags, ppData);
392}
393
394LOADER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
395{
396 const VkLayerDispatchTable *disp;
397
398 disp = loader_get_dispatch(device);
399
400 return disp->UnmapMemory(device, mem);
401}
402
403LOADER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
404{
405 const VkLayerDispatchTable *disp;
406
407 disp = loader_get_dispatch(device);
408
409 return disp->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
410}
411
412LOADER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
413{
414 const VkLayerDispatchTable *disp;
415
416 disp = loader_get_dispatch(device);
417
418 return disp->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
419}
420
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600421LOADER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
422{
423 const VkLayerDispatchTable *disp;
424
425 disp = loader_get_dispatch(device);
426
427 return disp->DestroyObject(device, objType, object);
428}
429
Tony Barbour426b9052015-06-24 16:06:58 -0600430LOADER_EXPORT VkResult VKAPI vkGetObjectMemoryRequirements(VkDevice device, VkObjectType objType, VkObject object, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600431{
432 const VkLayerDispatchTable *disp;
433
434 disp = loader_get_dispatch(device);
435
Tony Barbour426b9052015-06-24 16:06:58 -0600436 return disp->GetObjectMemoryRequirements(device, objType, object, pMemoryRequirements);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600437}
438
Mark Lobodzinski23182612015-05-29 09:32:35 -0500439LOADER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600440{
441 const VkLayerDispatchTable *disp;
442
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500443 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600444
Mark Lobodzinski23182612015-05-29 09:32:35 -0500445 return disp->BindObjectMemory(device, objType, object, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600446}
447
Mark Lobodzinski23182612015-05-29 09:32:35 -0500448LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600449{
450 const VkLayerDispatchTable *disp;
451
452 disp = loader_get_dispatch(queue);
453
Mark Lobodzinski23182612015-05-29 09:32:35 -0500454 return disp->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600455}
456
Mark Lobodzinski23182612015-05-29 09:32:35 -0500457LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600458{
459 const VkLayerDispatchTable *disp;
460
461 disp = loader_get_dispatch(queue);
462
Mark Lobodzinski23182612015-05-29 09:32:35 -0500463 return disp->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600464}
465
466LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
467{
468 const VkLayerDispatchTable *disp;
469
470 disp = loader_get_dispatch(device);
471
472 return disp->CreateFence(device, pCreateInfo, pFence);
473}
474
Courtney Goeltzenleuchterf2e33ad2015-06-18 17:28:20 -0600475LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600476{
477 const VkLayerDispatchTable *disp;
478
479 disp = loader_get_dispatch(device);
480
481 return disp->ResetFences(device, fenceCount, pFences);
482}
483
484LOADER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
485{
486 const VkLayerDispatchTable *disp;
487
488 disp = loader_get_dispatch(device);
489
490 return disp->GetFenceStatus(device, fence);
491}
492
493LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout)
494{
495 const VkLayerDispatchTable *disp;
496
497 disp = loader_get_dispatch(device);
498
499 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
500}
501
502LOADER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
503{
504 const VkLayerDispatchTable *disp;
505
506 disp = loader_get_dispatch(device);
507
508 return disp->CreateSemaphore(device, pCreateInfo, pSemaphore);
509}
510
511LOADER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
512{
513 const VkLayerDispatchTable *disp;
514
515 disp = loader_get_dispatch(queue);
516
517 return disp->QueueSignalSemaphore(queue, semaphore);
518}
519
520LOADER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
521{
522 const VkLayerDispatchTable *disp;
523
524 disp = loader_get_dispatch(queue);
525
526 return disp->QueueWaitSemaphore(queue, semaphore);
527}
528
529LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
530{
531 const VkLayerDispatchTable *disp;
532
533 disp = loader_get_dispatch(device);
534
535 return disp->CreateEvent(device, pCreateInfo, pEvent);
536}
537
538LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
539{
540 const VkLayerDispatchTable *disp;
541
542 disp = loader_get_dispatch(device);
543
544 return disp->GetEventStatus(device, event);
545}
546
547LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
548{
549 const VkLayerDispatchTable *disp;
550
551 disp = loader_get_dispatch(device);
552
553 return disp->SetEvent(device, event);
554}
555
556LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
557{
558 const VkLayerDispatchTable *disp;
559
560 disp = loader_get_dispatch(device);
561
562 return disp->ResetEvent(device, event);
563}
564
565LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
566{
567 const VkLayerDispatchTable *disp;
568
569 disp = loader_get_dispatch(device);
570
571 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool);
572}
573
574LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
575{
576 const VkLayerDispatchTable *disp;
577
578 disp = loader_get_dispatch(device);
579
580 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
581}
582
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600583LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
584{
585 const VkLayerDispatchTable *disp;
586
587 disp = loader_get_dispatch(device);
588
589 return disp->CreateBuffer(device, pCreateInfo, pBuffer);
590}
591
592LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
593{
594 const VkLayerDispatchTable *disp;
595
596 disp = loader_get_dispatch(device);
597
598 return disp->CreateBufferView(device, pCreateInfo, pView);
599}
600
601LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
602{
603 const VkLayerDispatchTable *disp;
604
605 disp = loader_get_dispatch(device);
606
607 return disp->CreateImage(device, pCreateInfo, pImage);
608}
609
Tony Barbour426b9052015-06-24 16:06:58 -0600610LOADER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600611{
612 const VkLayerDispatchTable *disp;
613
614 disp = loader_get_dispatch(device);
615
Tony Barbour426b9052015-06-24 16:06:58 -0600616 return disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600617}
618
619LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
620{
621 const VkLayerDispatchTable *disp;
622
623 disp = loader_get_dispatch(device);
624
625 return disp->CreateImageView(device, pCreateInfo, pView);
626}
627
628LOADER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
629{
630 const VkLayerDispatchTable *disp;
631
632 disp = loader_get_dispatch(device);
633
634 return disp->CreateColorAttachmentView(device, pCreateInfo, pView);
635}
636
637LOADER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
638{
639 const VkLayerDispatchTable *disp;
640
641 disp = loader_get_dispatch(device);
642
643 return disp->CreateDepthStencilView(device, pCreateInfo, pView);
644}
645
Courtney Goeltzenleuchter0b29b0d2015-06-24 18:24:19 -0600646LOADER_EXPORT VkResult VKAPI vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShader)
647{
648 const VkLayerDispatchTable *disp;
649
650 disp = loader_get_dispatch(device);
651
652 return disp->CreateShaderModule(device, pCreateInfo, pShader);
653}
654
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600655LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
656{
657 const VkLayerDispatchTable *disp;
658
659 disp = loader_get_dispatch(device);
660
661 return disp->CreateShader(device, pCreateInfo, pShader);
662}
663
664LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
665{
666 const VkLayerDispatchTable *disp;
667
668 disp = loader_get_dispatch(device);
669
670 return disp->CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
671}
672
673LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
674{
675 const VkLayerDispatchTable *disp;
676
677 disp = loader_get_dispatch(device);
678
679 return disp->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
680}
681
682LOADER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
683{
684 const VkLayerDispatchTable *disp;
685
686 disp = loader_get_dispatch(device);
687
688 return disp->CreateComputePipeline(device, pCreateInfo, pPipeline);
689}
690
691LOADER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
692{
693 const VkLayerDispatchTable *disp;
694
695 disp = loader_get_dispatch(device);
696
697 return disp->StorePipeline(device, pipeline, pDataSize, pData);
698}
699
700LOADER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
701{
702 const VkLayerDispatchTable *disp;
703
704 disp = loader_get_dispatch(device);
705
706 return disp->LoadPipeline(device, dataSize, pData, pPipeline);
707}
708
709LOADER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
710{
711 const VkLayerDispatchTable *disp;
712
713 disp = loader_get_dispatch(device);
714
715 return disp->LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
716}
717
718LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
719{
720 const VkLayerDispatchTable *disp;
721
722 disp = loader_get_dispatch(device);
723
724 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
725}
726
727LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
728{
729 const VkLayerDispatchTable *disp;
730
731 disp = loader_get_dispatch(device);
732
733 return disp->CreateSampler(device, pCreateInfo, pSampler);
734}
735
736LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
737{
738 const VkLayerDispatchTable *disp;
739
740 disp = loader_get_dispatch(device);
741
742 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
743}
744
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600745LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
746{
747 const VkLayerDispatchTable *disp;
748
749 disp = loader_get_dispatch(device);
750
751 return disp->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
752}
753
754LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
755{
756 const VkLayerDispatchTable *disp;
757
758 disp = loader_get_dispatch(device);
759
760 return disp->ResetDescriptorPool(device, descriptorPool);
761}
762
763LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
764{
765 const VkLayerDispatchTable *disp;
766
767 disp = loader_get_dispatch(device);
768
769 return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
770}
771
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800772LOADER_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 -0600773{
774 const VkLayerDispatchTable *disp;
775
776 disp = loader_get_dispatch(device);
777
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800778 return disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600779}
780
781LOADER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
782{
783 const VkLayerDispatchTable *disp;
784
785 disp = loader_get_dispatch(device);
786
787 return disp->CreateDynamicViewportState(device, pCreateInfo, pState);
788}
789
790LOADER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
791{
792 const VkLayerDispatchTable *disp;
793
794 disp = loader_get_dispatch(device);
795
796 return disp->CreateDynamicRasterState(device, pCreateInfo, pState);
797}
798
799LOADER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
800{
801 const VkLayerDispatchTable *disp;
802
803 disp = loader_get_dispatch(device);
804
805 return disp->CreateDynamicColorBlendState(device, pCreateInfo, pState);
806}
807
808LOADER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
809{
810 const VkLayerDispatchTable *disp;
811
812 disp = loader_get_dispatch(device);
813
814 return disp->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
815}
816
817LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
818{
819 const VkLayerDispatchTable *disp;
820 VkResult res;
821
822 disp = loader_get_dispatch(device);
823
824 res = disp->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
825 if (res == VK_SUCCESS) {
826 loader_init_dispatch(*pCmdBuffer, disp);
827 }
828
829 return res;
830}
831
832LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
833{
834 const VkLayerDispatchTable *disp;
835
836 disp = loader_get_dispatch(cmdBuffer);
837
838 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo);
839}
840
841LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
842{
843 const VkLayerDispatchTable *disp;
844
845 disp = loader_get_dispatch(cmdBuffer);
846
847 return disp->EndCommandBuffer(cmdBuffer);
848}
849
850LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
851{
852 const VkLayerDispatchTable *disp;
853
854 disp = loader_get_dispatch(cmdBuffer);
855
856 return disp->ResetCommandBuffer(cmdBuffer);
857}
858
859LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
860{
861 const VkLayerDispatchTable *disp;
862
863 disp = loader_get_dispatch(cmdBuffer);
864
865 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
866}
867
868LOADER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
869{
870 const VkLayerDispatchTable *disp;
871
872 disp = loader_get_dispatch(cmdBuffer);
873
874 disp->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
875}
876
Mark Lobodzinskia65c4632015-06-15 13:21:21 -0600877LOADER_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 -0600878{
879 const VkLayerDispatchTable *disp;
880
881 disp = loader_get_dispatch(cmdBuffer);
882
Mark Lobodzinskia65c4632015-06-15 13:21:21 -0600883 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600884}
885
886LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
887{
888 const VkLayerDispatchTable *disp;
889
890 disp = loader_get_dispatch(cmdBuffer);
891
892 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
893}
894
895LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
896{
897 const VkLayerDispatchTable *disp;
898
899 disp = loader_get_dispatch(cmdBuffer);
900
901 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
902}
903
904LOADER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
905{
906 const VkLayerDispatchTable *disp;
907
908 disp = loader_get_dispatch(cmdBuffer);
909
910 disp->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
911}
912
913LOADER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
914{
915 const VkLayerDispatchTable *disp;
916
917 disp = loader_get_dispatch(cmdBuffer);
918
919 disp->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
920}
921
922LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
923{
924 const VkLayerDispatchTable *disp;
925
926 disp = loader_get_dispatch(cmdBuffer);
927
928 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
929}
930
931LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
932{
933 const VkLayerDispatchTable *disp;
934
935 disp = loader_get_dispatch(cmdBuffer);
936
937 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
938}
939
940LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
941{
942 const VkLayerDispatchTable *disp;
943
944 disp = loader_get_dispatch(cmdBuffer);
945
946 disp->CmdDispatch(cmdBuffer, x, y, z);
947}
948
949LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
950{
951 const VkLayerDispatchTable *disp;
952
953 disp = loader_get_dispatch(cmdBuffer);
954
955 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset);
956}
957
958LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
959{
960 const VkLayerDispatchTable *disp;
961
962 disp = loader_get_dispatch(cmdBuffer);
963
964 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
965}
966
967LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
968{
969 const VkLayerDispatchTable *disp;
970
971 disp = loader_get_dispatch(cmdBuffer);
972
973 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
974}
975
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500976LOADER_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 -0600977{
978 const VkLayerDispatchTable *disp;
979
980 disp = loader_get_dispatch(cmdBuffer);
981
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500982 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600983}
984
985LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
986{
987 const VkLayerDispatchTable *disp;
988
989 disp = loader_get_dispatch(cmdBuffer);
990
991 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
992}
993
994LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
995{
996 const VkLayerDispatchTable *disp;
997
998 disp = loader_get_dispatch(cmdBuffer);
999
1000 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
1001}
1002
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001003LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
1004{
1005 const VkLayerDispatchTable *disp;
1006
1007 disp = loader_get_dispatch(cmdBuffer);
1008
1009 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
1010}
1011
1012LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
1013{
1014 const VkLayerDispatchTable *disp;
1015
1016 disp = loader_get_dispatch(cmdBuffer);
1017
1018 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
1019}
1020
Chris Forbese3105972015-06-24 14:34:53 +12001021LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001022{
1023 const VkLayerDispatchTable *disp;
1024
1025 disp = loader_get_dispatch(cmdBuffer);
1026
1027 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
1028}
1029
Chris Forbes2951d7d2015-06-22 17:21:59 +12001030LOADER_EXPORT void VKAPI vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001031{
1032 const VkLayerDispatchTable *disp;
1033
1034 disp = loader_get_dispatch(cmdBuffer);
1035
Chris Forbes2951d7d2015-06-22 17:21:59 +12001036 disp->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
1037}
1038
Chris Forbese3105972015-06-24 14:34:53 +12001039LOADER_EXPORT void VKAPI vkCmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects)
Chris Forbes2951d7d2015-06-22 17:21:59 +12001040{
1041 const VkLayerDispatchTable *disp;
1042
1043 disp = loader_get_dispatch(cmdBuffer);
1044
1045 disp->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
1046}
1047
1048LOADER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects)
1049{
1050 const VkLayerDispatchTable *disp;
1051
1052 disp = loader_get_dispatch(cmdBuffer);
1053
1054 disp->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001055}
1056
1057LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
1058{
1059 const VkLayerDispatchTable *disp;
1060
1061 disp = loader_get_dispatch(cmdBuffer);
1062
1063 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1064}
1065
Tony Barbourc2e987e2015-06-29 16:20:35 -06001066LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001067{
1068 const VkLayerDispatchTable *disp;
1069
1070 disp = loader_get_dispatch(cmdBuffer);
1071
Tony Barbourc2e987e2015-06-29 16:20:35 -06001072 disp->CmdSetEvent(cmdBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001073}
1074
Tony Barbourc2e987e2015-06-29 16:20:35 -06001075LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001076{
1077 const VkLayerDispatchTable *disp;
1078
1079 disp = loader_get_dispatch(cmdBuffer);
1080
Tony Barbourc2e987e2015-06-29 16:20:35 -06001081 disp->CmdResetEvent(cmdBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001082}
1083
Tony Barbourc2e987e2015-06-29 16:20:35 -06001084LOADER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags sourceStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void** ppMemBarriers)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001085{
1086 const VkLayerDispatchTable *disp;
1087
1088 disp = loader_get_dispatch(cmdBuffer);
1089
Tony Barbourc2e987e2015-06-29 16:20:35 -06001090 disp->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001091}
1092
Tony Barbourc2e987e2015-06-29 16:20:35 -06001093LOADER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags sourceStageMask, VkPipelineStageFlags destStageMask, bool32_t byRegion, uint32_t memBarrierCount, const void** ppMemBarriers)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001094{
1095 const VkLayerDispatchTable *disp;
1096
1097 disp = loader_get_dispatch(cmdBuffer);
1098
Tony Barbourc2e987e2015-06-29 16:20:35 -06001099 disp->CmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001100}
1101
1102LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
1103{
1104 const VkLayerDispatchTable *disp;
1105
1106 disp = loader_get_dispatch(cmdBuffer);
1107
1108 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1109}
1110
1111LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
1112{
1113 const VkLayerDispatchTable *disp;
1114
1115 disp = loader_get_dispatch(cmdBuffer);
1116
1117 disp->CmdEndQuery(cmdBuffer, queryPool, slot);
1118}
1119
1120LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
1121{
1122 const VkLayerDispatchTable *disp;
1123
1124 disp = loader_get_dispatch(cmdBuffer);
1125
1126 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1127}
1128
1129LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset)
1130{
1131 const VkLayerDispatchTable *disp;
1132
1133 disp = loader_get_dispatch(cmdBuffer);
1134
1135 disp->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1136}
1137
1138LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkFlags flags)
1139{
1140 const VkLayerDispatchTable *disp;
1141
1142 disp = loader_get_dispatch(cmdBuffer);
1143
1144 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
1145}
1146
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001147LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
1148{
1149 const VkLayerDispatchTable *disp;
1150
1151 disp = loader_get_dispatch(device);
1152
1153 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
1154}
1155
1156LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
1157{
1158 const VkLayerDispatchTable *disp;
1159
1160 disp = loader_get_dispatch(device);
1161
1162 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass);
1163}
1164
1165LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
1166{
1167 const VkLayerDispatchTable *disp;
1168
1169 disp = loader_get_dispatch(cmdBuffer);
1170
1171 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1172}
1173
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001174LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001175{
1176 const VkLayerDispatchTable *disp;
1177
1178 disp = loader_get_dispatch(cmdBuffer);
1179
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08001180 disp->CmdEndRenderPass(cmdBuffer);
1181}
1182
1183LOADER_EXPORT void VKAPI vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers)
1184{
1185 const VkLayerDispatchTable *disp;
1186
1187 disp = loader_get_dispatch(cmdBuffer);
1188
1189 disp->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001190}