trampoline.c revision a375b624c433613a3b5243dfabe342a97bcd1d67
1/* 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 */ 24#define _GNU_SOURCE 25#include <stdlib.h> 26#include <string.h> 27 28#include "vk_loader_platform.h" 29#include "loader.h" 30#include "debug_report.h" 31#include "wsi_swapchain.h" 32 33#if defined(WIN32) 34// On Windows need to disable global optimization for function entrypoints or 35// else mhook will not be able to hook all of them 36#pragma optimize( "g", off ) 37#endif 38 39/* Trampoline entrypoints */ 40LOADER_EXPORT VkResult VKAPI vkCreateInstance( 41 const VkInstanceCreateInfo* pCreateInfo, 42 VkInstance* pInstance) 43{ 44 struct loader_instance *ptr_instance = NULL; 45 46 VkResult res = VK_ERROR_INITIALIZATION_FAILED; 47 48 /* Scan/discover all ICD libraries in a single-threaded manner */ 49 loader_platform_thread_once(&once_icd, loader_icd_scan); 50 51 /* get layer libraries in a single-threaded manner */ 52 loader_platform_thread_once(&once_layer, loader_layer_scan); 53 54 /* merge any duplicate extensions */ 55 loader_platform_thread_once(&once_exts, loader_coalesce_extensions); 56 57 res = loader_validate_layers(pCreateInfo->layerCount, 58 pCreateInfo->ppEnabledLayerNames, 59 &loader.scanned_instance_layers); 60 if (res != VK_SUCCESS) { 61 return res; 62 } 63 64 res = loader_validate_instance_extensions(pCreateInfo); 65 if (res != VK_SUCCESS) { 66 return res; 67 } 68 69 if (pCreateInfo->pAllocCb 70 && pCreateInfo->pAllocCb->pfnAlloc 71 && pCreateInfo->pAllocCb->pfnFree) { 72 ptr_instance = (struct loader_instance *) pCreateInfo->pAllocCb->pfnAlloc( 73 pCreateInfo->pAllocCb->pUserData, 74 sizeof(struct loader_instance), 75 sizeof(VkInstance), 76 VK_SYSTEM_ALLOC_TYPE_API_OBJECT); 77 } else { 78 ptr_instance = (struct loader_instance *) malloc(sizeof(struct loader_instance)); 79 } 80 if (ptr_instance == NULL) { 81 return VK_ERROR_OUT_OF_HOST_MEMORY; 82 } 83 84 memset(ptr_instance, 0, sizeof(struct loader_instance)); 85 86 loader_platform_thread_lock_mutex(&loader_lock); 87 88 if (pCreateInfo->pAllocCb 89 && pCreateInfo->pAllocCb->pfnAlloc 90 && pCreateInfo->pAllocCb->pfnFree) { 91 ptr_instance->alloc_callbacks.pUserData = pCreateInfo->pAllocCb->pUserData; 92 ptr_instance->alloc_callbacks.pfnAlloc = pCreateInfo->pAllocCb->pfnAlloc; 93 ptr_instance->alloc_callbacks.pfnFree = pCreateInfo->pAllocCb->pfnFree; 94 } 95 96 ptr_instance->disp = loader_heap_alloc( 97 ptr_instance, 98 sizeof(VkLayerInstanceDispatchTable), 99 VK_SYSTEM_ALLOC_TYPE_INTERNAL); 100 if (ptr_instance->disp == NULL) { 101 loader_platform_thread_unlock_mutex(&loader_lock); 102 return VK_ERROR_OUT_OF_HOST_MEMORY; 103 } 104 memcpy(ptr_instance->disp, &instance_disp, sizeof(instance_disp)); 105 ptr_instance->next = loader.instances; 106 loader.instances = ptr_instance; 107 108 res = loader_enable_instance_layers(ptr_instance, pCreateInfo); 109 if (res != VK_SUCCESS) { 110 loader_heap_free(ptr_instance, ptr_instance->disp); 111 loader_heap_free(ptr_instance, ptr_instance); 112 return res; 113 } 114 115 wsi_swapchain_create_instance(ptr_instance, pCreateInfo); 116 debug_report_create_instance(ptr_instance, pCreateInfo); 117 118 /* enable any layers on instance chain */ 119 loader_activate_instance_layers(ptr_instance); 120 121 *pInstance = (VkInstance) ptr_instance; 122 123 res = ptr_instance->disp->CreateInstance(pCreateInfo, pInstance); 124 125 /* 126 * Finally have the layers in place and everyone has seen 127 * the CreateInstance command go by. This allows the layer's 128 * GetInstanceProcAddr functions to return valid extension functions 129 * if enabled. 130 */ 131 loader_activate_instance_layer_extensions(ptr_instance); 132 133 loader_platform_thread_unlock_mutex(&loader_lock); 134 135 return res; 136} 137 138LOADER_EXPORT VkResult VKAPI vkDestroyInstance( 139 VkInstance instance) 140{ 141 const VkLayerInstanceDispatchTable *disp; 142 VkResult res; 143 disp = loader_get_instance_dispatch(instance); 144 145 loader_platform_thread_lock_mutex(&loader_lock); 146 147 res = disp->DestroyInstance(instance); 148 149 struct loader_instance *ptr_instance = loader_instance(instance); 150 loader_deactivate_instance_layers(ptr_instance); 151 152 free(ptr_instance); 153 154 loader_platform_thread_unlock_mutex(&loader_lock); 155 156 return res; 157} 158 159LOADER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices( 160 VkInstance instance, 161 uint32_t* pPhysicalDeviceCount, 162 VkPhysicalDevice* pPhysicalDevices) 163{ 164 const VkLayerInstanceDispatchTable *disp; 165 VkResult res; 166 disp = loader_get_instance_dispatch(instance); 167 168 loader_platform_thread_lock_mutex(&loader_lock); 169 res = disp->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, 170 pPhysicalDevices); 171 loader_platform_thread_unlock_mutex(&loader_lock); 172 return res; 173} 174 175 176 177 178 179 180LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures( 181 VkPhysicalDevice gpu, 182 VkPhysicalDeviceFeatures *pFeatures) 183{ 184 const VkLayerInstanceDispatchTable *disp; 185 VkResult res; 186 187 disp = loader_get_instance_dispatch(gpu); 188 res = disp->GetPhysicalDeviceFeatures(gpu, pFeatures); 189 return res; 190} 191 192LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties( 193 VkPhysicalDevice gpu, 194 VkFormat format, 195 VkFormatProperties *pFormatInfo) 196{ 197 const VkLayerInstanceDispatchTable *disp; 198 VkResult res; 199 200 disp = loader_get_instance_dispatch(gpu); 201 res = disp->GetPhysicalDeviceFormatProperties(gpu, format, pFormatInfo); 202 return res; 203} 204 205LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageFormatProperties* pImageFormatProperties) 206{ 207 const VkLayerInstanceDispatchTable *disp; 208 VkResult res; 209 210 disp = loader_get_instance_dispatch(physicalDevice); 211 res = disp->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties); 212 return res; 213} 214 215LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits( 216 VkPhysicalDevice gpu, 217 VkPhysicalDeviceLimits *pLimits) 218{ 219 const VkLayerInstanceDispatchTable *disp; 220 VkResult res; 221 222 disp = loader_get_instance_dispatch(gpu); 223 res = disp->GetPhysicalDeviceLimits(gpu, pLimits); 224 return res; 225} 226 227LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties( 228 VkPhysicalDevice gpu, 229 VkPhysicalDeviceProperties* pProperties) 230{ 231 const VkLayerInstanceDispatchTable *disp; 232 VkResult res; 233 234 disp = loader_get_instance_dispatch(gpu); 235 res = disp->GetPhysicalDeviceProperties(gpu, pProperties); 236 return res; 237} 238 239LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueCount( 240 VkPhysicalDevice gpu, 241 uint32_t* pCount) 242{ 243 const VkLayerInstanceDispatchTable *disp; 244 VkResult res; 245 246 disp = loader_get_instance_dispatch(gpu); 247 res = disp->GetPhysicalDeviceQueueCount(gpu, pCount); 248 return res; 249} 250 251LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties( 252 VkPhysicalDevice gpu, 253 uint32_t count, 254 VkPhysicalDeviceQueueProperties* pQueueProperties) 255{ 256 const VkLayerInstanceDispatchTable *disp; 257 VkResult res; 258 259 disp = loader_get_instance_dispatch(gpu); 260 res = disp->GetPhysicalDeviceQueueProperties(gpu, count, pQueueProperties); 261 return res; 262} 263 264LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties( 265 VkPhysicalDevice gpu, 266 VkPhysicalDeviceMemoryProperties* pMemoryProperties) 267{ 268 const VkLayerInstanceDispatchTable *disp; 269 VkResult res; 270 271 disp = loader_get_instance_dispatch(gpu); 272 res = disp->GetPhysicalDeviceMemoryProperties(gpu, pMemoryProperties); 273 return res; 274} 275 276LOADER_EXPORT VkResult VKAPI vkCreateDevice( 277 VkPhysicalDevice gpu, 278 const VkDeviceCreateInfo* pCreateInfo, 279 VkDevice* pDevice) 280{ 281 VkResult res; 282 283 loader_platform_thread_lock_mutex(&loader_lock); 284 285 res = loader_CreateDevice(gpu, pCreateInfo, pDevice); 286 287 loader_platform_thread_unlock_mutex(&loader_lock); 288 return res; 289} 290 291LOADER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device) 292{ 293 const VkLayerDispatchTable *disp; 294 VkResult res; 295 296 disp = loader_get_dispatch(device); 297 298 loader_platform_thread_lock_mutex(&loader_lock); 299 res = disp->DestroyDevice(device); 300 loader_remove_logical_device(device); 301 loader_platform_thread_unlock_mutex(&loader_lock); 302 return res; 303} 304 305LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties( 306 VkPhysicalDevice physicalDevice, 307 const char* pLayerName, 308 uint32_t* pCount, 309 VkExtensionProperties* pProperties) 310{ 311 VkResult res; 312 313 loader_platform_thread_lock_mutex(&loader_lock); 314 //TODO convert over to using instance chain dispatch 315 res = loader_GetPhysicalDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties); 316 loader_platform_thread_unlock_mutex(&loader_lock); 317 return res; 318} 319 320LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties( 321 VkPhysicalDevice physicalDevice, 322 uint32_t* pCount, 323 VkLayerProperties* pProperties) 324{ 325 VkResult res; 326 327 loader_platform_thread_lock_mutex(&loader_lock); 328 //TODO convert over to using instance chain dispatch 329 res = loader_GetPhysicalDeviceLayerProperties(physicalDevice, pCount, pProperties); 330 loader_platform_thread_unlock_mutex(&loader_lock); 331 return res; 332} 333 334LOADER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue) 335{ 336 const VkLayerDispatchTable *disp; 337 VkResult res; 338 339 disp = loader_get_dispatch(device); 340 341 res = disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue); 342 if (res == VK_SUCCESS) { 343 loader_set_dispatch(*pQueue, disp); 344 } 345 346 return res; 347} 348 349LOADER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence) 350{ 351 const VkLayerDispatchTable *disp; 352 353 disp = loader_get_dispatch(queue); 354 355 return disp->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence); 356} 357 358LOADER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue) 359{ 360 const VkLayerDispatchTable *disp; 361 362 disp = loader_get_dispatch(queue); 363 364 return disp->QueueWaitIdle(queue); 365} 366 367LOADER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device) 368{ 369 const VkLayerDispatchTable *disp; 370 371 disp = loader_get_dispatch(device); 372 373 return disp->DeviceWaitIdle(device); 374} 375 376LOADER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem) 377{ 378 const VkLayerDispatchTable *disp; 379 380 disp = loader_get_dispatch(device); 381 382 return disp->AllocMemory(device, pAllocInfo, pMem); 383} 384 385LOADER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem) 386{ 387 const VkLayerDispatchTable *disp; 388 389 disp = loader_get_dispatch(device); 390 391 return disp->FreeMemory(device, mem); 392} 393 394LOADER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData) 395{ 396 const VkLayerDispatchTable *disp; 397 398 disp = loader_get_dispatch(device); 399 400 return disp->MapMemory(device, mem, offset, size, flags, ppData); 401} 402 403LOADER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem) 404{ 405 const VkLayerDispatchTable *disp; 406 407 disp = loader_get_dispatch(device); 408 409 return disp->UnmapMemory(device, mem); 410} 411 412LOADER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) 413{ 414 const VkLayerDispatchTable *disp; 415 416 disp = loader_get_dispatch(device); 417 418 return disp->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges); 419} 420 421LOADER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) 422{ 423 const VkLayerDispatchTable *disp; 424 425 disp = loader_get_dispatch(device); 426 427 return disp->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges); 428} 429 430LOADER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) 431{ 432 const VkLayerDispatchTable *disp; 433 434 disp = loader_get_dispatch(device); 435 436 return disp->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes); 437} 438 439LOADER_EXPORT VkResult VKAPI vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize offset) 440{ 441 const VkLayerDispatchTable *disp; 442 443 disp = loader_get_dispatch(device); 444 445 return disp->BindBufferMemory(device, buffer, mem, offset); 446} 447 448LOADER_EXPORT VkResult VKAPI vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize offset) 449{ 450 const VkLayerDispatchTable *disp; 451 452 disp = loader_get_dispatch(device); 453 454 return disp->BindImageMemory(device, image, mem, offset); 455} 456 457LOADER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) 458{ 459 const VkLayerDispatchTable *disp; 460 461 disp = loader_get_dispatch(device); 462 463 return disp->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements); 464} 465 466LOADER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) 467{ 468 const VkLayerDispatchTable *disp; 469 470 disp = loader_get_dispatch(device); 471 472 return disp->GetImageMemoryRequirements(device, image, pMemoryRequirements); 473} 474 475LOADER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) 476{ 477 const VkLayerDispatchTable *disp; 478 479 disp = loader_get_dispatch(device); 480 481 return disp->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements); 482} 483 484LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) 485{ 486 const VkLayerInstanceDispatchTable *disp; 487 488 disp = loader_get_instance_dispatch(physicalDevice); 489 490 return disp->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties); 491} 492 493LOADER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) 494{ 495 const VkLayerDispatchTable *disp; 496 497 disp = loader_get_dispatch(queue); 498 499 return disp->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo); 500} 501 502LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) 503{ 504 const VkLayerDispatchTable *disp; 505 506 disp = loader_get_dispatch(queue); 507 508 return disp->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo); 509} 510 511LOADER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo) 512{ 513 const VkLayerDispatchTable *disp; 514 515 disp = loader_get_dispatch(queue); 516 517 return disp->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo); 518} 519 520LOADER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence) 521{ 522 const VkLayerDispatchTable *disp; 523 524 disp = loader_get_dispatch(device); 525 526 return disp->CreateFence(device, pCreateInfo, pFence); 527} 528 529LOADER_EXPORT VkResult VKAPI vkDestroyFence(VkDevice device, VkFence fence) 530{ 531 const VkLayerDispatchTable *disp; 532 533 disp = loader_get_dispatch(device); 534 535 return disp->DestroyFence(device, fence); 536} 537 538LOADER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) 539{ 540 const VkLayerDispatchTable *disp; 541 542 disp = loader_get_dispatch(device); 543 544 return disp->ResetFences(device, fenceCount, pFences); 545} 546 547LOADER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence) 548{ 549 const VkLayerDispatchTable *disp; 550 551 disp = loader_get_dispatch(device); 552 553 return disp->GetFenceStatus(device, fence); 554} 555 556LOADER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout) 557{ 558 const VkLayerDispatchTable *disp; 559 560 disp = loader_get_dispatch(device); 561 562 return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout); 563} 564 565LOADER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore) 566{ 567 const VkLayerDispatchTable *disp; 568 569 disp = loader_get_dispatch(device); 570 571 return disp->CreateSemaphore(device, pCreateInfo, pSemaphore); 572} 573 574LOADER_EXPORT VkResult VKAPI vkDestroySemaphore(VkDevice device, VkSemaphore semaphore) 575{ 576 const VkLayerDispatchTable *disp; 577 578 disp = loader_get_dispatch(device); 579 580 return disp->DestroySemaphore(device, semaphore); 581} 582 583LOADER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore) 584{ 585 const VkLayerDispatchTable *disp; 586 587 disp = loader_get_dispatch(queue); 588 589 return disp->QueueSignalSemaphore(queue, semaphore); 590} 591 592LOADER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore) 593{ 594 const VkLayerDispatchTable *disp; 595 596 disp = loader_get_dispatch(queue); 597 598 return disp->QueueWaitSemaphore(queue, semaphore); 599} 600 601LOADER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent) 602{ 603 const VkLayerDispatchTable *disp; 604 605 disp = loader_get_dispatch(device); 606 607 return disp->CreateEvent(device, pCreateInfo, pEvent); 608} 609 610LOADER_EXPORT VkResult VKAPI vkDestroyEvent(VkDevice device, VkEvent event) 611{ 612 const VkLayerDispatchTable *disp; 613 614 disp = loader_get_dispatch(device); 615 616 return disp->DestroyEvent(device, event); 617} 618 619LOADER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event) 620{ 621 const VkLayerDispatchTable *disp; 622 623 disp = loader_get_dispatch(device); 624 625 return disp->GetEventStatus(device, event); 626} 627 628LOADER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event) 629{ 630 const VkLayerDispatchTable *disp; 631 632 disp = loader_get_dispatch(device); 633 634 return disp->SetEvent(device, event); 635} 636 637LOADER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event) 638{ 639 const VkLayerDispatchTable *disp; 640 641 disp = loader_get_dispatch(device); 642 643 return disp->ResetEvent(device, event); 644} 645 646LOADER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool) 647{ 648 const VkLayerDispatchTable *disp; 649 650 disp = loader_get_dispatch(device); 651 652 return disp->CreateQueryPool(device, pCreateInfo, pQueryPool); 653} 654 655LOADER_EXPORT VkResult VKAPI vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool) 656{ 657 const VkLayerDispatchTable *disp; 658 659 disp = loader_get_dispatch(device); 660 661 return disp->DestroyQueryPool(device, queryPool); 662} 663 664LOADER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags) 665{ 666 const VkLayerDispatchTable *disp; 667 668 disp = loader_get_dispatch(device); 669 670 return disp->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags); 671} 672 673LOADER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer) 674{ 675 const VkLayerDispatchTable *disp; 676 677 disp = loader_get_dispatch(device); 678 679 return disp->CreateBuffer(device, pCreateInfo, pBuffer); 680} 681 682LOADER_EXPORT VkResult VKAPI vkDestroyBuffer(VkDevice device, VkBuffer buffer) 683{ 684 const VkLayerDispatchTable *disp; 685 686 disp = loader_get_dispatch(device); 687 688 return disp->DestroyBuffer(device, buffer); 689} 690 691LOADER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView) 692{ 693 const VkLayerDispatchTable *disp; 694 695 disp = loader_get_dispatch(device); 696 697 return disp->CreateBufferView(device, pCreateInfo, pView); 698} 699 700LOADER_EXPORT VkResult VKAPI vkDestroyBufferView(VkDevice device, VkBufferView bufferView) 701{ 702 const VkLayerDispatchTable *disp; 703 704 disp = loader_get_dispatch(device); 705 706 return disp->DestroyBufferView(device, bufferView); 707} 708 709LOADER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage) 710{ 711 const VkLayerDispatchTable *disp; 712 713 disp = loader_get_dispatch(device); 714 715 return disp->CreateImage(device, pCreateInfo, pImage); 716} 717 718LOADER_EXPORT VkResult VKAPI vkDestroyImage(VkDevice device, VkImage image) 719{ 720 const VkLayerDispatchTable *disp; 721 722 disp = loader_get_dispatch(device); 723 724 return disp->DestroyImage(device, image); 725} 726 727LOADER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) 728{ 729 const VkLayerDispatchTable *disp; 730 731 disp = loader_get_dispatch(device); 732 733 return disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout); 734} 735 736LOADER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView) 737{ 738 const VkLayerDispatchTable *disp; 739 740 disp = loader_get_dispatch(device); 741 742 return disp->CreateImageView(device, pCreateInfo, pView); 743} 744 745LOADER_EXPORT VkResult VKAPI vkDestroyImageView(VkDevice device, VkImageView imageView) 746{ 747 const VkLayerDispatchTable *disp; 748 749 disp = loader_get_dispatch(device); 750 751 return disp->DestroyImageView(device, imageView); 752} 753 754LOADER_EXPORT VkResult VKAPI vkCreateAttachmentView(VkDevice device, const VkAttachmentViewCreateInfo* pCreateInfo, VkAttachmentView* pView) 755{ 756 const VkLayerDispatchTable *disp; 757 758 disp = loader_get_dispatch(device); 759 760 return disp->CreateAttachmentView(device, pCreateInfo, pView); 761} 762 763LOADER_EXPORT VkResult VKAPI vkDestroyAttachmentView(VkDevice device, VkAttachmentView attachmentView) 764{ 765 const VkLayerDispatchTable *disp; 766 767 disp = loader_get_dispatch(device); 768 769 return disp->DestroyAttachmentView(device, attachmentView); 770} 771 772LOADER_EXPORT VkResult VKAPI vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShader) 773{ 774 const VkLayerDispatchTable *disp; 775 776 disp = loader_get_dispatch(device); 777 778 return disp->CreateShaderModule(device, pCreateInfo, pShader); 779} 780 781LOADER_EXPORT VkResult VKAPI vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule) 782{ 783 const VkLayerDispatchTable *disp; 784 785 disp = loader_get_dispatch(device); 786 787 return disp->DestroyShaderModule(device, shaderModule); 788} 789 790LOADER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader) 791{ 792 const VkLayerDispatchTable *disp; 793 794 disp = loader_get_dispatch(device); 795 796 return disp->CreateShader(device, pCreateInfo, pShader); 797} 798 799LOADER_EXPORT VkResult VKAPI vkDestroyShader(VkDevice device, VkShader shader) 800{ 801 const VkLayerDispatchTable *disp; 802 803 disp = loader_get_dispatch(device); 804 805 return disp->DestroyShader(device, shader); 806} 807 808LOADER_EXPORT VkResult VKAPI vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache) 809{ 810 const VkLayerDispatchTable *disp; 811 812 disp = loader_get_dispatch(device); 813 814 return disp->CreatePipelineCache(device, pCreateInfo, pPipelineCache); 815} 816 817LOADER_EXPORT VkResult VKAPI vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache) 818{ 819 const VkLayerDispatchTable *disp; 820 821 disp = loader_get_dispatch(device); 822 823 return disp->DestroyPipelineCache(device, pipelineCache); 824} 825 826LOADER_EXPORT size_t VKAPI vkGetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache) 827{ 828 const VkLayerDispatchTable *disp; 829 830 disp = loader_get_dispatch(device); 831 832 return disp->GetPipelineCacheSize(device, pipelineCache); 833} 834 835LOADER_EXPORT VkResult VKAPI vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, void* pData) 836{ 837 const VkLayerDispatchTable *disp; 838 839 disp = loader_get_dispatch(device); 840 841 return disp->GetPipelineCacheData(device, pipelineCache, pData); 842} 843 844LOADER_EXPORT VkResult VKAPI vkMergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) 845{ 846 const VkLayerDispatchTable *disp; 847 848 disp = loader_get_dispatch(device); 849 850 return disp->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches); 851} 852 853LOADER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines) 854{ 855 const VkLayerDispatchTable *disp; 856 857 disp = loader_get_dispatch(device); 858 859 return disp->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines); 860} 861 862LOADER_EXPORT VkResult VKAPI vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines) 863{ 864 const VkLayerDispatchTable *disp; 865 866 disp = loader_get_dispatch(device); 867 868 return disp->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines); 869} 870 871LOADER_EXPORT VkResult VKAPI vkDestroyPipeline(VkDevice device, VkPipeline pipeline) 872{ 873 const VkLayerDispatchTable *disp; 874 875 disp = loader_get_dispatch(device); 876 877 return disp->DestroyPipeline(device, pipeline); 878} 879 880LOADER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout) 881{ 882 const VkLayerDispatchTable *disp; 883 884 disp = loader_get_dispatch(device); 885 886 return disp->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout); 887} 888 889LOADER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout) 890{ 891 const VkLayerDispatchTable *disp; 892 893 disp = loader_get_dispatch(device); 894 895 return disp->DestroyPipelineLayout(device, pipelineLayout); 896} 897 898LOADER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler) 899{ 900 const VkLayerDispatchTable *disp; 901 902 disp = loader_get_dispatch(device); 903 904 return disp->CreateSampler(device, pCreateInfo, pSampler); 905} 906 907LOADER_EXPORT VkResult VKAPI vkDestroySampler(VkDevice device, VkSampler sampler) 908{ 909 const VkLayerDispatchTable *disp; 910 911 disp = loader_get_dispatch(device); 912 913 return disp->DestroySampler(device, sampler); 914} 915 916 917LOADER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout) 918{ 919 const VkLayerDispatchTable *disp; 920 921 disp = loader_get_dispatch(device); 922 923 return disp->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout); 924} 925 926LOADER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout) 927{ 928 const VkLayerDispatchTable *disp; 929 930 disp = loader_get_dispatch(device); 931 932 return disp->DestroyDescriptorSetLayout(device, descriptorSetLayout); 933} 934 935LOADER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool) 936{ 937 const VkLayerDispatchTable *disp; 938 939 disp = loader_get_dispatch(device); 940 941 return disp->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool); 942} 943 944LOADER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) 945{ 946 const VkLayerDispatchTable *disp; 947 948 disp = loader_get_dispatch(device); 949 950 return disp->DestroyDescriptorPool(device, descriptorPool); 951} 952 953 954LOADER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) 955{ 956 const VkLayerDispatchTable *disp; 957 958 disp = loader_get_dispatch(device); 959 960 return disp->ResetDescriptorPool(device, descriptorPool); 961} 962 963LOADER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount) 964{ 965 const VkLayerDispatchTable *disp; 966 967 disp = loader_get_dispatch(device); 968 969 return disp->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount); 970} 971 972LOADER_EXPORT VkResult VKAPI vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets) 973{ 974 const VkLayerDispatchTable *disp; 975 976 disp = loader_get_dispatch(device); 977 978 return disp->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets); 979} 980 981LOADER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies) 982{ 983 const VkLayerDispatchTable *disp; 984 985 disp = loader_get_dispatch(device); 986 987 return disp->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies); 988} 989 990LOADER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicViewportStateCreateInfo* pCreateInfo, VkDynamicViewportState* pState) 991{ 992 const VkLayerDispatchTable *disp; 993 994 disp = loader_get_dispatch(device); 995 996 return disp->CreateDynamicViewportState(device, pCreateInfo, pState); 997} 998 999LOADER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(VkDevice device, VkDynamicViewportState dynamicViewportState) 1000{ 1001 const VkLayerDispatchTable *disp; 1002 1003 disp = loader_get_dispatch(device); 1004 1005 return disp->DestroyDynamicViewportState(device, dynamicViewportState); 1006} 1007 1008LOADER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRasterStateCreateInfo* pCreateInfo, VkDynamicRasterState* pState) 1009{ 1010 const VkLayerDispatchTable *disp; 1011 1012 disp = loader_get_dispatch(device); 1013 1014 return disp->CreateDynamicRasterState(device, pCreateInfo, pState); 1015} 1016 1017LOADER_EXPORT VkResult VKAPI vkDestroyDynamicRasterState(VkDevice device, VkDynamicRasterState dynamicRasterState) 1018{ 1019 const VkLayerDispatchTable *disp; 1020 1021 disp = loader_get_dispatch(device); 1022 1023 return disp->DestroyDynamicRasterState(device, dynamicRasterState); 1024} 1025 1026LOADER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicColorBlendStateCreateInfo* pCreateInfo, VkDynamicColorBlendState* pState) 1027{ 1028 const VkLayerDispatchTable *disp; 1029 1030 disp = loader_get_dispatch(device); 1031 1032 return disp->CreateDynamicColorBlendState(device, pCreateInfo, pState); 1033} 1034 1035LOADER_EXPORT VkResult VKAPI vkDestroyDynamicColorBlendState(VkDevice device, VkDynamicColorBlendState dynamicColorBlendState) 1036{ 1037 const VkLayerDispatchTable *disp; 1038 1039 disp = loader_get_dispatch(device); 1040 1041 return disp->DestroyDynamicColorBlendState(device, dynamicColorBlendState); 1042} 1043 1044LOADER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDepthStencilStateCreateInfo* pCreateInfo, VkDynamicDepthStencilState* pState) 1045{ 1046 const VkLayerDispatchTable *disp; 1047 1048 disp = loader_get_dispatch(device); 1049 1050 return disp->CreateDynamicDepthStencilState(device, pCreateInfo, pState); 1051} 1052 1053LOADER_EXPORT VkResult VKAPI vkDestroyDynamicDepthStencilState(VkDevice device, VkDynamicDepthStencilState dynamicDepthStencilState) 1054{ 1055 const VkLayerDispatchTable *disp; 1056 1057 disp = loader_get_dispatch(device); 1058 1059 return disp->DestroyDynamicDepthStencilState(device, dynamicDepthStencilState); 1060} 1061 1062LOADER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer) 1063{ 1064 const VkLayerDispatchTable *disp; 1065 1066 disp = loader_get_dispatch(device); 1067 1068 return disp->CreateFramebuffer(device, pCreateInfo, pFramebuffer); 1069} 1070 1071LOADER_EXPORT VkResult VKAPI vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer) 1072{ 1073 const VkLayerDispatchTable *disp; 1074 1075 disp = loader_get_dispatch(device); 1076 1077 return disp->DestroyFramebuffer(device, framebuffer); 1078} 1079 1080LOADER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass) 1081{ 1082 const VkLayerDispatchTable *disp; 1083 1084 disp = loader_get_dispatch(device); 1085 1086 return disp->CreateRenderPass(device, pCreateInfo, pRenderPass); 1087} 1088 1089LOADER_EXPORT VkResult VKAPI vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass) 1090{ 1091 const VkLayerDispatchTable *disp; 1092 1093 disp = loader_get_dispatch(device); 1094 1095 return disp->DestroyRenderPass(device, renderPass); 1096} 1097 1098LOADER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) 1099{ 1100 const VkLayerDispatchTable *disp; 1101 1102 disp = loader_get_dispatch(device); 1103 1104 return disp->GetRenderAreaGranularity(device, renderPass, pGranularity); 1105} 1106 1107LOADER_EXPORT VkResult VKAPI vkCreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool) 1108{ 1109 const VkLayerDispatchTable *disp; 1110 1111 disp = loader_get_dispatch(device); 1112 1113 return disp->CreateCommandPool(device, pCreateInfo, pCmdPool); 1114} 1115 1116LOADER_EXPORT VkResult VKAPI vkDestroyCommandPool(VkDevice device, VkCmdPool cmdPool) 1117{ 1118 const VkLayerDispatchTable *disp; 1119 1120 disp = loader_get_dispatch(device); 1121 1122 return disp->DestroyCommandPool(device, cmdPool); 1123} 1124 1125LOADER_EXPORT VkResult VKAPI vkResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags) 1126{ 1127 const VkLayerDispatchTable *disp; 1128 1129 disp = loader_get_dispatch(device); 1130 1131 return disp->ResetCommandPool(device, cmdPool, flags); 1132} 1133 1134LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer) 1135{ 1136 const VkLayerDispatchTable *disp; 1137 VkResult res; 1138 1139 disp = loader_get_dispatch(device); 1140 1141 res = disp->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer); 1142 if (res == VK_SUCCESS) { 1143 loader_init_dispatch(*pCmdBuffer, disp); 1144 } 1145 1146 return res; 1147} 1148 1149LOADER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(VkDevice device, VkCmdBuffer cmdBuffer) 1150{ 1151 const VkLayerDispatchTable *disp; 1152 1153 disp = loader_get_dispatch(device); 1154 1155 return disp->DestroyCommandBuffer(device, cmdBuffer); 1156} 1157 1158LOADER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo) 1159{ 1160 const VkLayerDispatchTable *disp; 1161 1162 disp = loader_get_dispatch(cmdBuffer); 1163 1164 return disp->BeginCommandBuffer(cmdBuffer, pBeginInfo); 1165} 1166 1167LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer) 1168{ 1169 const VkLayerDispatchTable *disp; 1170 1171 disp = loader_get_dispatch(cmdBuffer); 1172 1173 return disp->EndCommandBuffer(cmdBuffer); 1174} 1175 1176LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags) 1177{ 1178 const VkLayerDispatchTable *disp; 1179 1180 disp = loader_get_dispatch(cmdBuffer); 1181 1182 return disp->ResetCommandBuffer(cmdBuffer, flags); 1183} 1184 1185LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) 1186{ 1187 const VkLayerDispatchTable *disp; 1188 1189 disp = loader_get_dispatch(cmdBuffer); 1190 1191 disp->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline); 1192} 1193 1194LOADER_EXPORT void VKAPI vkCmdBindDynamicViewportState(VkCmdBuffer cmdBuffer, VkDynamicViewportState state) 1195{ 1196 const VkLayerDispatchTable *disp; 1197 1198 disp = loader_get_dispatch(cmdBuffer); 1199 1200 disp->CmdBindDynamicViewportState(cmdBuffer, state); 1201} 1202 1203LOADER_EXPORT void VKAPI vkCmdBindDynamicRasterState(VkCmdBuffer cmdBuffer, VkDynamicRasterState state) 1204{ 1205 const VkLayerDispatchTable *disp; 1206 1207 disp = loader_get_dispatch(cmdBuffer); 1208 1209 disp->CmdBindDynamicRasterState(cmdBuffer, state); 1210} 1211 1212LOADER_EXPORT void VKAPI vkCmdBindDynamicColorBlendState(VkCmdBuffer cmdBuffer, VkDynamicColorBlendState state) 1213{ 1214 const VkLayerDispatchTable *disp; 1215 1216 disp = loader_get_dispatch(cmdBuffer); 1217 1218 disp->CmdBindDynamicColorBlendState(cmdBuffer, state); 1219} 1220 1221LOADER_EXPORT void VKAPI vkCmdBindDynamicDepthStencilState(VkCmdBuffer cmdBuffer, VkDynamicDepthStencilState state) 1222{ 1223 const VkLayerDispatchTable *disp; 1224 1225 disp = loader_get_dispatch(cmdBuffer); 1226 1227 disp->CmdBindDynamicDepthStencilState(cmdBuffer, state); 1228} 1229 1230LOADER_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) 1231{ 1232 const VkLayerDispatchTable *disp; 1233 1234 disp = loader_get_dispatch(cmdBuffer); 1235 1236 disp->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); 1237} 1238 1239LOADER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) 1240{ 1241 const VkLayerDispatchTable *disp; 1242 1243 disp = loader_get_dispatch(cmdBuffer); 1244 1245 disp->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType); 1246} 1247 1248LOADER_EXPORT void VKAPI vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) 1249{ 1250 const VkLayerDispatchTable *disp; 1251 1252 disp = loader_get_dispatch(cmdBuffer); 1253 1254 disp->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets); 1255} 1256 1257LOADER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount) 1258{ 1259 const VkLayerDispatchTable *disp; 1260 1261 disp = loader_get_dispatch(cmdBuffer); 1262 1263 disp->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount); 1264} 1265 1266LOADER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount) 1267{ 1268 const VkLayerDispatchTable *disp; 1269 1270 disp = loader_get_dispatch(cmdBuffer); 1271 1272 disp->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount); 1273} 1274 1275LOADER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) 1276{ 1277 const VkLayerDispatchTable *disp; 1278 1279 disp = loader_get_dispatch(cmdBuffer); 1280 1281 disp->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride); 1282} 1283 1284LOADER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) 1285{ 1286 const VkLayerDispatchTable *disp; 1287 1288 disp = loader_get_dispatch(cmdBuffer); 1289 1290 disp->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride); 1291} 1292 1293LOADER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z) 1294{ 1295 const VkLayerDispatchTable *disp; 1296 1297 disp = loader_get_dispatch(cmdBuffer); 1298 1299 disp->CmdDispatch(cmdBuffer, x, y, z); 1300} 1301 1302LOADER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset) 1303{ 1304 const VkLayerDispatchTable *disp; 1305 1306 disp = loader_get_dispatch(cmdBuffer); 1307 1308 disp->CmdDispatchIndirect(cmdBuffer, buffer, offset); 1309} 1310 1311LOADER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) 1312{ 1313 const VkLayerDispatchTable *disp; 1314 1315 disp = loader_get_dispatch(cmdBuffer); 1316 1317 disp->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions); 1318} 1319 1320LOADER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) 1321{ 1322 const VkLayerDispatchTable *disp; 1323 1324 disp = loader_get_dispatch(cmdBuffer); 1325 1326 disp->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions); 1327} 1328 1329LOADER_EXPORT void VKAPI vkCmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter) 1330{ 1331 const VkLayerDispatchTable *disp; 1332 1333 disp = loader_get_dispatch(cmdBuffer); 1334 1335 disp->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter); 1336} 1337 1338LOADER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) 1339{ 1340 const VkLayerDispatchTable *disp; 1341 1342 disp = loader_get_dispatch(cmdBuffer); 1343 1344 disp->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions); 1345} 1346 1347LOADER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) 1348{ 1349 const VkLayerDispatchTable *disp; 1350 1351 disp = loader_get_dispatch(cmdBuffer); 1352 1353 disp->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions); 1354} 1355 1356LOADER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData) 1357{ 1358 const VkLayerDispatchTable *disp; 1359 1360 disp = loader_get_dispatch(cmdBuffer); 1361 1362 disp->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData); 1363} 1364 1365LOADER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data) 1366{ 1367 const VkLayerDispatchTable *disp; 1368 1369 disp = loader_get_dispatch(cmdBuffer); 1370 1371 disp->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data); 1372} 1373 1374LOADER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) 1375{ 1376 const VkLayerDispatchTable *disp; 1377 1378 disp = loader_get_dispatch(cmdBuffer); 1379 1380 disp->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges); 1381} 1382 1383LOADER_EXPORT void VKAPI vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) 1384{ 1385 const VkLayerDispatchTable *disp; 1386 1387 disp = loader_get_dispatch(cmdBuffer); 1388 1389 disp->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges); 1390} 1391 1392LOADER_EXPORT void VKAPI vkCmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects) 1393{ 1394 const VkLayerDispatchTable *disp; 1395 1396 disp = loader_get_dispatch(cmdBuffer); 1397 1398 disp->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects); 1399} 1400 1401LOADER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects) 1402{ 1403 const VkLayerDispatchTable *disp; 1404 1405 disp = loader_get_dispatch(cmdBuffer); 1406 1407 disp->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects); 1408} 1409 1410LOADER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) 1411{ 1412 const VkLayerDispatchTable *disp; 1413 1414 disp = loader_get_dispatch(cmdBuffer); 1415 1416 disp->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions); 1417} 1418 1419LOADER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) 1420{ 1421 const VkLayerDispatchTable *disp; 1422 1423 disp = loader_get_dispatch(cmdBuffer); 1424 1425 disp->CmdSetEvent(cmdBuffer, event, stageMask); 1426} 1427 1428LOADER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) 1429{ 1430 const VkLayerDispatchTable *disp; 1431 1432 disp = loader_get_dispatch(cmdBuffer); 1433 1434 disp->CmdResetEvent(cmdBuffer, event, stageMask); 1435} 1436 1437LOADER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags sourceStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers) 1438{ 1439 const VkLayerDispatchTable *disp; 1440 1441 disp = loader_get_dispatch(cmdBuffer); 1442 1443 disp->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers); 1444} 1445 1446LOADER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkBool32 byRegion, uint32_t memBarrierCount, const void* const* ppMemBarriers) 1447{ 1448 const VkLayerDispatchTable *disp; 1449 1450 disp = loader_get_dispatch(cmdBuffer); 1451 1452 disp->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers); 1453} 1454 1455LOADER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags) 1456{ 1457 const VkLayerDispatchTable *disp; 1458 1459 disp = loader_get_dispatch(cmdBuffer); 1460 1461 disp->CmdBeginQuery(cmdBuffer, queryPool, slot, flags); 1462} 1463 1464LOADER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) 1465{ 1466 const VkLayerDispatchTable *disp; 1467 1468 disp = loader_get_dispatch(cmdBuffer); 1469 1470 disp->CmdEndQuery(cmdBuffer, queryPool, slot); 1471} 1472 1473LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) 1474{ 1475 const VkLayerDispatchTable *disp; 1476 1477 disp = loader_get_dispatch(cmdBuffer); 1478 1479 disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount); 1480} 1481 1482LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset) 1483{ 1484 const VkLayerDispatchTable *disp; 1485 1486 disp = loader_get_dispatch(cmdBuffer); 1487 1488 disp->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset); 1489} 1490 1491LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkFlags flags) 1492{ 1493 const VkLayerDispatchTable *disp; 1494 1495 disp = loader_get_dispatch(cmdBuffer); 1496 1497 disp->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags); 1498} 1499 1500LOADER_EXPORT void VKAPI vkCmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values) 1501{ 1502 const VkLayerDispatchTable *disp; 1503 1504 disp = loader_get_dispatch(cmdBuffer); 1505 1506 disp->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values); 1507} 1508 1509LOADER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents) 1510{ 1511 const VkLayerDispatchTable *disp; 1512 1513 disp = loader_get_dispatch(cmdBuffer); 1514 1515 disp->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents); 1516} 1517 1518LOADER_EXPORT void VKAPI vkCmdNextSubpass(VkCmdBuffer cmdBuffer, VkRenderPassContents contents) 1519{ 1520 const VkLayerDispatchTable *disp; 1521 1522 disp = loader_get_dispatch(cmdBuffer); 1523 1524 disp->CmdNextSubpass(cmdBuffer, contents); 1525} 1526 1527LOADER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer) 1528{ 1529 const VkLayerDispatchTable *disp; 1530 1531 disp = loader_get_dispatch(cmdBuffer); 1532 1533 disp->CmdEndRenderPass(cmdBuffer); 1534} 1535 1536LOADER_EXPORT void VKAPI vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers) 1537{ 1538 const VkLayerDispatchTable *disp; 1539 1540 disp = loader_get_dispatch(cmdBuffer); 1541 1542 disp->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers); 1543} 1544