blob: 3967fbfd91650dfa427c07d9e81a44298af0a736 [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
Tony Barbour426b9052015-06-24 16:06:58 -0600149LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
Jon Ashburnfce93d92015-05-12 17:26:48 -0600150 VkPhysicalDevice gpu,
Tony Barbour426b9052015-06-24 16:06:58 -0600151 VkPhysicalDeviceProperties* pProperties)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600152{
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600153 const VkLayerInstanceDispatchTable *disp;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600154 VkResult res;
155
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600156 disp = loader_get_instance_dispatch(gpu);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600157
Jon Ashburnb40f2562015-05-29 13:15:39 -0600158 loader_platform_thread_lock_mutex(&loader_lock);
Tony Barbour426b9052015-06-24 16:06:58 -0600159 res = disp->GetPhysicalDeviceProperties(gpu, pProperties);
160 loader_platform_thread_unlock_mutex(&loader_lock);
161
162 return res;
163}
164
165LOADER_EXPORT VkResult VKAPI vkGetPhysicalDevicePerformance(
166 VkPhysicalDevice gpu,
167 VkPhysicalDevicePerformance* pPerformance)
168{
169 const VkLayerInstanceDispatchTable *disp;
170 VkResult res;
171
172 disp = loader_get_instance_dispatch(gpu);
173
174 loader_platform_thread_lock_mutex(&loader_lock);
175 res = disp->GetPhysicalDevicePerformance(gpu, pPerformance);
176 loader_platform_thread_unlock_mutex(&loader_lock);
177
178 return res;
179}
180
181LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueCount(
182 VkPhysicalDevice gpu,
183 uint32_t* pCount)
184{
185 const VkLayerInstanceDispatchTable *disp;
186 VkResult res;
187
188 disp = loader_get_instance_dispatch(gpu);
189
190 loader_platform_thread_lock_mutex(&loader_lock);
191 res = disp->GetPhysicalDeviceQueueCount(gpu, pCount);
192 loader_platform_thread_unlock_mutex(&loader_lock);
193
194 return res;
195}
196
197LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
198 VkPhysicalDevice gpu,
199 uint32_t count,
200 VkPhysicalDeviceQueueProperties* pQueueProperties)
201{
202 const VkLayerInstanceDispatchTable *disp;
203 VkResult res;
204
205 disp = loader_get_instance_dispatch(gpu);
206
207 loader_platform_thread_lock_mutex(&loader_lock);
208 res = disp->GetPhysicalDeviceQueueProperties(gpu, count, pQueueProperties);
209 loader_platform_thread_unlock_mutex(&loader_lock);
210
211 return res;
212}
213
214LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
215 VkPhysicalDevice gpu,
216 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
217{
218 const VkLayerInstanceDispatchTable *disp;
219 VkResult res;
220
221 disp = loader_get_instance_dispatch(gpu);
222
223 loader_platform_thread_lock_mutex(&loader_lock);
224 res = disp->GetPhysicalDeviceMemoryProperties(gpu, pMemoryProperties);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600225 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600226
227 return res;
228}
229
Chris Forbesd7576302015-06-21 22:55:02 +1200230LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
231 VkPhysicalDevice gpu,
232 VkPhysicalDeviceFeatures *pFeatures)
233{
234 const VkLayerInstanceDispatchTable *disp;
235 VkResult res;
236
237 disp = loader_get_instance_dispatch(gpu);
238
239 loader_platform_thread_lock_mutex(&loader_lock);
240 res = disp->GetPhysicalDeviceFeatures(gpu, pFeatures);
241 loader_platform_thread_unlock_mutex(&loader_lock);
242
243 return res;
244}
245
246LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatInfo(
247 VkPhysicalDevice gpu,
248 VkFormat format,
249 VkFormatProperties *pFormatInfo)
250{
251 const VkLayerInstanceDispatchTable *disp;
252 VkResult res;
253
254 disp = loader_get_instance_dispatch(gpu);
255
256 loader_platform_thread_lock_mutex(&loader_lock);
257 res = disp->GetPhysicalDeviceFormatInfo(gpu, format, pFormatInfo);
258 loader_platform_thread_unlock_mutex(&loader_lock);
259
260 return res;
261}
262
263LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
264 VkPhysicalDevice gpu,
265 VkPhysicalDeviceLimits *pLimits)
266{
267 const VkLayerInstanceDispatchTable *disp;
268 VkResult res;
269
270 disp = loader_get_instance_dispatch(gpu);
271
272 loader_platform_thread_lock_mutex(&loader_lock);
273 res = disp->GetPhysicalDeviceLimits(gpu, pLimits);
274 loader_platform_thread_unlock_mutex(&loader_lock);
275
276 return res;
277}
278
Jon Ashburn2666e2f2015-05-15 15:09:35 -0600279LOADER_EXPORT VkResult VKAPI vkCreateDevice(
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600280 VkPhysicalDevice gpu,
281 const VkDeviceCreateInfo* pCreateInfo,
282 VkDevice* pDevice)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600283{
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600284 VkResult res;
285
Jon Ashburnb40f2562015-05-29 13:15:39 -0600286 loader_platform_thread_lock_mutex(&loader_lock);
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -0600287
288 res = loader_CreateDevice(gpu, pCreateInfo, pDevice);
289
Jon Ashburnb40f2562015-05-29 13:15:39 -0600290 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600291 return res;
292}
293
294LOADER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
295{
296 const VkLayerDispatchTable *disp;
Jon Ashburnfce93d92015-05-12 17:26:48 -0600297 VkResult res;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600298
299 disp = loader_get_dispatch(device);
300
Jon Ashburnb40f2562015-05-29 13:15:39 -0600301 loader_platform_thread_lock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600302 res = disp->DestroyDevice(device);
Jon Ashburncb5a5ac2015-06-10 10:06:06 -0600303 loader_remove_logical_device(device);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600304 loader_platform_thread_unlock_mutex(&loader_lock);
305 return res;
306}
307
Tony Barbour426b9052015-06-24 16:06:58 -0600308LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Jon Ashburnb40f2562015-05-29 13:15:39 -0600309 VkPhysicalDevice gpu,
Jon Ashburnb40f2562015-05-29 13:15:39 -0600310 uint32_t extensionIndex,
Tony Barbour426b9052015-06-24 16:06:58 -0600311 VkExtensionProperties* pProperties)
Jon Ashburnb40f2562015-05-29 13:15:39 -0600312{
313 VkResult res;
314
315 loader_platform_thread_lock_mutex(&loader_lock);
Tony Barbour426b9052015-06-24 16:06:58 -0600316 res = loader_GetPhysicalDeviceExtensionProperties(gpu, extensionIndex, pProperties);
317 loader_platform_thread_unlock_mutex(&loader_lock);
318 return res;
319}
320
321LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionCount(
322 VkPhysicalDevice gpu,
323 uint32_t* pCount)
324{
325 VkResult res;
326
327 loader_platform_thread_lock_mutex(&loader_lock);
328 res = loader_GetPhysicalDeviceExtensionCount(gpu, pCount);
Jon Ashburnb40f2562015-05-29 13:15:39 -0600329 loader_platform_thread_unlock_mutex(&loader_lock);
Jon Ashburnfce93d92015-05-12 17:26:48 -0600330 return res;
331}
332
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600333LOADER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
334{
335 const VkLayerDispatchTable *disp;
336 VkResult res;
337
338 disp = loader_get_dispatch(device);
339
340 res = disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
341 if (res == VK_SUCCESS) {
342 loader_set_dispatch(*pQueue, disp);
343 }
344
345 return res;
346}
347
348LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
349{
350 const VkLayerDispatchTable *disp;
351
352 disp = loader_get_dispatch(queue);
353
354 return disp->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
355}
356
357LOADER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
358{
359 const VkLayerDispatchTable *disp;
360
361 disp = loader_get_dispatch(queue);
362
363 return disp->QueueWaitIdle(queue);
364}
365
366LOADER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
367{
368 const VkLayerDispatchTable *disp;
369
370 disp = loader_get_dispatch(device);
371
372 return disp->DeviceWaitIdle(device);
373}
374
375LOADER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem)
376{
377 const VkLayerDispatchTable *disp;
378
379 disp = loader_get_dispatch(device);
380
381 return disp->AllocMemory(device, pAllocInfo, pMem);
382}
383
384LOADER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
385{
386 const VkLayerDispatchTable *disp;
387
388 disp = loader_get_dispatch(device);
389
390 return disp->FreeMemory(device, mem);
391}
392
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600393LOADER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
394{
395 const VkLayerDispatchTable *disp;
396
397 disp = loader_get_dispatch(device);
398
399 return disp->MapMemory(device, mem, offset, size, flags, ppData);
400}
401
402LOADER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
403{
404 const VkLayerDispatchTable *disp;
405
406 disp = loader_get_dispatch(device);
407
408 return disp->UnmapMemory(device, mem);
409}
410
411LOADER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
412{
413 const VkLayerDispatchTable *disp;
414
415 disp = loader_get_dispatch(device);
416
417 return disp->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
418}
419
420LOADER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges)
421{
422 const VkLayerDispatchTable *disp;
423
424 disp = loader_get_dispatch(device);
425
426 return disp->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
427}
428
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600429LOADER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
430{
431 const VkLayerDispatchTable *disp;
432
433 disp = loader_get_dispatch(device);
434
435 return disp->DestroyObject(device, objType, object);
436}
437
Tony Barbour426b9052015-06-24 16:06:58 -0600438LOADER_EXPORT VkResult VKAPI vkGetObjectMemoryRequirements(VkDevice device, VkObjectType objType, VkObject object, VkMemoryRequirements* pMemoryRequirements)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600439{
440 const VkLayerDispatchTable *disp;
441
442 disp = loader_get_dispatch(device);
443
Tony Barbour426b9052015-06-24 16:06:58 -0600444 return disp->GetObjectMemoryRequirements(device, objType, object, pMemoryRequirements);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600445}
446
Mark Lobodzinski23182612015-05-29 09:32:35 -0500447LOADER_EXPORT VkResult VKAPI vkBindObjectMemory(VkDevice device, VkObjectType objType, VkObject object, VkDeviceMemory mem, VkDeviceSize offset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600448{
449 const VkLayerDispatchTable *disp;
450
Mark Lobodzinskifb9f5642015-05-11 17:21:15 -0500451 disp = loader_get_dispatch(device);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600452
Mark Lobodzinski23182612015-05-29 09:32:35 -0500453 return disp->BindObjectMemory(device, objType, object, mem, offset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600454}
455
Mark Lobodzinski23182612015-05-29 09:32:35 -0500456LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600457{
458 const VkLayerDispatchTable *disp;
459
460 disp = loader_get_dispatch(queue);
461
Mark Lobodzinski23182612015-05-29 09:32:35 -0500462 return disp->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600463}
464
Mark Lobodzinski23182612015-05-29 09:32:35 -0500465LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600466{
467 const VkLayerDispatchTable *disp;
468
469 disp = loader_get_dispatch(queue);
470
Mark Lobodzinski23182612015-05-29 09:32:35 -0500471 return disp->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600472}
473
474LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
475{
476 const VkLayerDispatchTable *disp;
477
478 disp = loader_get_dispatch(device);
479
480 return disp->CreateFence(device, pCreateInfo, pFence);
481}
482
Courtney Goeltzenleuchterf2e33ad2015-06-18 17:28:20 -0600483LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600484{
485 const VkLayerDispatchTable *disp;
486
487 disp = loader_get_dispatch(device);
488
489 return disp->ResetFences(device, fenceCount, pFences);
490}
491
492LOADER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
493{
494 const VkLayerDispatchTable *disp;
495
496 disp = loader_get_dispatch(device);
497
498 return disp->GetFenceStatus(device, fence);
499}
500
501LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout)
502{
503 const VkLayerDispatchTable *disp;
504
505 disp = loader_get_dispatch(device);
506
507 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
508}
509
510LOADER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
511{
512 const VkLayerDispatchTable *disp;
513
514 disp = loader_get_dispatch(device);
515
516 return disp->CreateSemaphore(device, pCreateInfo, pSemaphore);
517}
518
519LOADER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
520{
521 const VkLayerDispatchTable *disp;
522
523 disp = loader_get_dispatch(queue);
524
525 return disp->QueueSignalSemaphore(queue, semaphore);
526}
527
528LOADER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
529{
530 const VkLayerDispatchTable *disp;
531
532 disp = loader_get_dispatch(queue);
533
534 return disp->QueueWaitSemaphore(queue, semaphore);
535}
536
537LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
538{
539 const VkLayerDispatchTable *disp;
540
541 disp = loader_get_dispatch(device);
542
543 return disp->CreateEvent(device, pCreateInfo, pEvent);
544}
545
546LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
547{
548 const VkLayerDispatchTable *disp;
549
550 disp = loader_get_dispatch(device);
551
552 return disp->GetEventStatus(device, event);
553}
554
555LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
556{
557 const VkLayerDispatchTable *disp;
558
559 disp = loader_get_dispatch(device);
560
561 return disp->SetEvent(device, event);
562}
563
564LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
565{
566 const VkLayerDispatchTable *disp;
567
568 disp = loader_get_dispatch(device);
569
570 return disp->ResetEvent(device, event);
571}
572
573LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
574{
575 const VkLayerDispatchTable *disp;
576
577 disp = loader_get_dispatch(device);
578
579 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool);
580}
581
582LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
583{
584 const VkLayerDispatchTable *disp;
585
586 disp = loader_get_dispatch(device);
587
588 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
589}
590
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600591LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
592{
593 const VkLayerDispatchTable *disp;
594
595 disp = loader_get_dispatch(device);
596
597 return disp->CreateBuffer(device, pCreateInfo, pBuffer);
598}
599
600LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
601{
602 const VkLayerDispatchTable *disp;
603
604 disp = loader_get_dispatch(device);
605
606 return disp->CreateBufferView(device, pCreateInfo, pView);
607}
608
609LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
610{
611 const VkLayerDispatchTable *disp;
612
613 disp = loader_get_dispatch(device);
614
615 return disp->CreateImage(device, pCreateInfo, pImage);
616}
617
Tony Barbour426b9052015-06-24 16:06:58 -0600618LOADER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout)
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600619{
620 const VkLayerDispatchTable *disp;
621
622 disp = loader_get_dispatch(device);
623
Tony Barbour426b9052015-06-24 16:06:58 -0600624 return disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600625}
626
627LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
628{
629 const VkLayerDispatchTable *disp;
630
631 disp = loader_get_dispatch(device);
632
633 return disp->CreateImageView(device, pCreateInfo, pView);
634}
635
636LOADER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
637{
638 const VkLayerDispatchTable *disp;
639
640 disp = loader_get_dispatch(device);
641
642 return disp->CreateColorAttachmentView(device, pCreateInfo, pView);
643}
644
645LOADER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
646{
647 const VkLayerDispatchTable *disp;
648
649 disp = loader_get_dispatch(device);
650
651 return disp->CreateDepthStencilView(device, pCreateInfo, pView);
652}
653
654LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
655{
656 const VkLayerDispatchTable *disp;
657
658 disp = loader_get_dispatch(device);
659
660 return disp->CreateShader(device, pCreateInfo, pShader);
661}
662
663LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
664{
665 const VkLayerDispatchTable *disp;
666
667 disp = loader_get_dispatch(device);
668
669 return disp->CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
670}
671
672LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
673{
674 const VkLayerDispatchTable *disp;
675
676 disp = loader_get_dispatch(device);
677
678 return disp->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
679}
680
681LOADER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
682{
683 const VkLayerDispatchTable *disp;
684
685 disp = loader_get_dispatch(device);
686
687 return disp->CreateComputePipeline(device, pCreateInfo, pPipeline);
688}
689
690LOADER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
691{
692 const VkLayerDispatchTable *disp;
693
694 disp = loader_get_dispatch(device);
695
696 return disp->StorePipeline(device, pipeline, pDataSize, pData);
697}
698
699LOADER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
700{
701 const VkLayerDispatchTable *disp;
702
703 disp = loader_get_dispatch(device);
704
705 return disp->LoadPipeline(device, dataSize, pData, pPipeline);
706}
707
708LOADER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
709{
710 const VkLayerDispatchTable *disp;
711
712 disp = loader_get_dispatch(device);
713
714 return disp->LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
715}
716
717LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
718{
719 const VkLayerDispatchTable *disp;
720
721 disp = loader_get_dispatch(device);
722
723 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
724}
725
726LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
727{
728 const VkLayerDispatchTable *disp;
729
730 disp = loader_get_dispatch(device);
731
732 return disp->CreateSampler(device, pCreateInfo, pSampler);
733}
734
735LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
736{
737 const VkLayerDispatchTable *disp;
738
739 disp = loader_get_dispatch(device);
740
741 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
742}
743
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600744LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
745{
746 const VkLayerDispatchTable *disp;
747
748 disp = loader_get_dispatch(device);
749
750 return disp->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
751}
752
753LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
754{
755 const VkLayerDispatchTable *disp;
756
757 disp = loader_get_dispatch(device);
758
759 return disp->ResetDescriptorPool(device, descriptorPool);
760}
761
762LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
763{
764 const VkLayerDispatchTable *disp;
765
766 disp = loader_get_dispatch(device);
767
768 return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
769}
770
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800771LOADER_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 -0600772{
773 const VkLayerDispatchTable *disp;
774
775 disp = loader_get_dispatch(device);
776
Chia-I Wu8cd8ecd2015-05-25 16:27:55 +0800777 return disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600778}
779
780LOADER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
781{
782 const VkLayerDispatchTable *disp;
783
784 disp = loader_get_dispatch(device);
785
786 return disp->CreateDynamicViewportState(device, pCreateInfo, pState);
787}
788
789LOADER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
790{
791 const VkLayerDispatchTable *disp;
792
793 disp = loader_get_dispatch(device);
794
795 return disp->CreateDynamicRasterState(device, pCreateInfo, pState);
796}
797
798LOADER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
799{
800 const VkLayerDispatchTable *disp;
801
802 disp = loader_get_dispatch(device);
803
804 return disp->CreateDynamicColorBlendState(device, pCreateInfo, pState);
805}
806
807LOADER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
808{
809 const VkLayerDispatchTable *disp;
810
811 disp = loader_get_dispatch(device);
812
813 return disp->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
814}
815
816LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
817{
818 const VkLayerDispatchTable *disp;
819 VkResult res;
820
821 disp = loader_get_dispatch(device);
822
823 res = disp->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
824 if (res == VK_SUCCESS) {
825 loader_init_dispatch(*pCmdBuffer, disp);
826 }
827
828 return res;
829}
830
831LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
832{
833 const VkLayerDispatchTable *disp;
834
835 disp = loader_get_dispatch(cmdBuffer);
836
837 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo);
838}
839
840LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
841{
842 const VkLayerDispatchTable *disp;
843
844 disp = loader_get_dispatch(cmdBuffer);
845
846 return disp->EndCommandBuffer(cmdBuffer);
847}
848
849LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
850{
851 const VkLayerDispatchTable *disp;
852
853 disp = loader_get_dispatch(cmdBuffer);
854
855 return disp->ResetCommandBuffer(cmdBuffer);
856}
857
858LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
859{
860 const VkLayerDispatchTable *disp;
861
862 disp = loader_get_dispatch(cmdBuffer);
863
864 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
865}
866
867LOADER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
868{
869 const VkLayerDispatchTable *disp;
870
871 disp = loader_get_dispatch(cmdBuffer);
872
873 disp->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
874}
875
Mark Lobodzinskia65c4632015-06-15 13:21:21 -0600876LOADER_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 -0600877{
878 const VkLayerDispatchTable *disp;
879
880 disp = loader_get_dispatch(cmdBuffer);
881
Mark Lobodzinskia65c4632015-06-15 13:21:21 -0600882 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600883}
884
885LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
886{
887 const VkLayerDispatchTable *disp;
888
889 disp = loader_get_dispatch(cmdBuffer);
890
891 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
892}
893
894LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
895{
896 const VkLayerDispatchTable *disp;
897
898 disp = loader_get_dispatch(cmdBuffer);
899
900 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
901}
902
903LOADER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
904{
905 const VkLayerDispatchTable *disp;
906
907 disp = loader_get_dispatch(cmdBuffer);
908
909 disp->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
910}
911
912LOADER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
913{
914 const VkLayerDispatchTable *disp;
915
916 disp = loader_get_dispatch(cmdBuffer);
917
918 disp->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
919}
920
921LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
922{
923 const VkLayerDispatchTable *disp;
924
925 disp = loader_get_dispatch(cmdBuffer);
926
927 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
928}
929
930LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
931{
932 const VkLayerDispatchTable *disp;
933
934 disp = loader_get_dispatch(cmdBuffer);
935
936 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
937}
938
939LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
940{
941 const VkLayerDispatchTable *disp;
942
943 disp = loader_get_dispatch(cmdBuffer);
944
945 disp->CmdDispatch(cmdBuffer, x, y, z);
946}
947
948LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
949{
950 const VkLayerDispatchTable *disp;
951
952 disp = loader_get_dispatch(cmdBuffer);
953
954 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset);
955}
956
957LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
958{
959 const VkLayerDispatchTable *disp;
960
961 disp = loader_get_dispatch(cmdBuffer);
962
963 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
964}
965
966LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
967{
968 const VkLayerDispatchTable *disp;
969
970 disp = loader_get_dispatch(cmdBuffer);
971
972 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
973}
974
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500975LOADER_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 -0600976{
977 const VkLayerDispatchTable *disp;
978
979 disp = loader_get_dispatch(cmdBuffer);
980
Mark Lobodzinski20f68592015-05-22 14:43:25 -0500981 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600982}
983
984LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
985{
986 const VkLayerDispatchTable *disp;
987
988 disp = loader_get_dispatch(cmdBuffer);
989
990 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
991}
992
993LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
994{
995 const VkLayerDispatchTable *disp;
996
997 disp = loader_get_dispatch(cmdBuffer);
998
999 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
1000}
1001
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001002LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
1003{
1004 const VkLayerDispatchTable *disp;
1005
1006 disp = loader_get_dispatch(cmdBuffer);
1007
1008 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
1009}
1010
1011LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
1012{
1013 const VkLayerDispatchTable *disp;
1014
1015 disp = loader_get_dispatch(cmdBuffer);
1016
1017 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
1018}
1019
1020LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
1021{
1022 const VkLayerDispatchTable *disp;
1023
1024 disp = loader_get_dispatch(cmdBuffer);
1025
1026 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
1027}
1028
1029LOADER_EXPORT void VKAPI vkCmdClearDepthStencil(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
1030{
1031 const VkLayerDispatchTable *disp;
1032
1033 disp = loader_get_dispatch(cmdBuffer);
1034
1035 disp->CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
1036}
1037
1038LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
1039{
1040 const VkLayerDispatchTable *disp;
1041
1042 disp = loader_get_dispatch(cmdBuffer);
1043
1044 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1045}
1046
Tony Barbourc2e987e2015-06-29 16:20:35 -06001047LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001048{
1049 const VkLayerDispatchTable *disp;
1050
1051 disp = loader_get_dispatch(cmdBuffer);
1052
Tony Barbourc2e987e2015-06-29 16:20:35 -06001053 disp->CmdSetEvent(cmdBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001054}
1055
Tony Barbourc2e987e2015-06-29 16:20:35 -06001056LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask)
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001057{
1058 const VkLayerDispatchTable *disp;
1059
1060 disp = loader_get_dispatch(cmdBuffer);
1061
Tony Barbourc2e987e2015-06-29 16:20:35 -06001062 disp->CmdResetEvent(cmdBuffer, event, stageMask);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001063}
1064
Tony Barbourc2e987e2015-06-29 16:20:35 -06001065LOADER_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 -06001066{
1067 const VkLayerDispatchTable *disp;
1068
1069 disp = loader_get_dispatch(cmdBuffer);
1070
Tony Barbourc2e987e2015-06-29 16:20:35 -06001071 disp->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001072}
1073
Tony Barbourc2e987e2015-06-29 16:20:35 -06001074LOADER_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 -06001075{
1076 const VkLayerDispatchTable *disp;
1077
1078 disp = loader_get_dispatch(cmdBuffer);
1079
Tony Barbourc2e987e2015-06-29 16:20:35 -06001080 disp->CmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001081}
1082
1083LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
1084{
1085 const VkLayerDispatchTable *disp;
1086
1087 disp = loader_get_dispatch(cmdBuffer);
1088
1089 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1090}
1091
1092LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
1093{
1094 const VkLayerDispatchTable *disp;
1095
1096 disp = loader_get_dispatch(cmdBuffer);
1097
1098 disp->CmdEndQuery(cmdBuffer, queryPool, slot);
1099}
1100
1101LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
1102{
1103 const VkLayerDispatchTable *disp;
1104
1105 disp = loader_get_dispatch(cmdBuffer);
1106
1107 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1108}
1109
1110LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset)
1111{
1112 const VkLayerDispatchTable *disp;
1113
1114 disp = loader_get_dispatch(cmdBuffer);
1115
1116 disp->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1117}
1118
1119LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkFlags flags)
1120{
1121 const VkLayerDispatchTable *disp;
1122
1123 disp = loader_get_dispatch(cmdBuffer);
1124
1125 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
1126}
1127
1128LOADER_EXPORT void VKAPI vkCmdInitAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData)
1129{
1130 const VkLayerDispatchTable *disp;
1131
1132 disp = loader_get_dispatch(cmdBuffer);
1133
1134 disp->CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData);
1135}
1136
1137LOADER_EXPORT void VKAPI vkCmdLoadAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer srcBuffer, VkDeviceSize srcOffset)
1138{
1139 const VkLayerDispatchTable *disp;
1140
1141 disp = loader_get_dispatch(cmdBuffer);
1142
1143 disp->CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset);
1144}
1145
1146LOADER_EXPORT void VKAPI vkCmdSaveAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer destBuffer, VkDeviceSize destOffset)
1147{
1148 const VkLayerDispatchTable *disp;
1149
1150 disp = loader_get_dispatch(cmdBuffer);
1151
1152 disp->CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset);
1153}
1154
1155LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
1156{
1157 const VkLayerDispatchTable *disp;
1158
1159 disp = loader_get_dispatch(device);
1160
1161 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
1162}
1163
1164LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
1165{
1166 const VkLayerDispatchTable *disp;
1167
1168 disp = loader_get_dispatch(device);
1169
1170 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass);
1171}
1172
1173LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
1174{
1175 const VkLayerDispatchTable *disp;
1176
1177 disp = loader_get_dispatch(cmdBuffer);
1178
1179 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1180}
1181
1182LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass)
1183{
1184 const VkLayerDispatchTable *disp;
1185
1186 disp = loader_get_dispatch(cmdBuffer);
1187
1188 disp->CmdEndRenderPass(cmdBuffer, renderPass);
1189}