1
0
mirror of https://github.com/elima/gpu-playground.git synced 2025-06-06 15:36:35 +00:00
2016-11-10 10:45:33 +01:00

103 lines
4.2 KiB
C

/*
* Vulkan API loader helper
*
* This code is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* version 3, or (at your option) any later version as published by
* the Free Software Foundation.
*
* THIS CODE IS PROVIDED AS-IS, WITHOUT WARRANTY OF ANY KIND, OR POSSIBLE
* LIABILITY TO THE AUTHORS FOR ANY CLAIM OR DAMAGE.
*/
#include <assert.h>
#include "vk-api.h"
void
vk_api_load_from_icd (struct vk_api* vk)
{
/* load API entry points from ICD */
/* if program is linked against a Vulkan loader */
vk->GetInstanceProcAddr = vkGetInstanceProcAddr;
/* otherwise, */
/* GET_ICD_PROC_ADDR (vk, GetInstanceProcAddr); */
GET_PROC_ADDR (*vk, EnumerateInstanceLayerProperties);
GET_PROC_ADDR (*vk, EnumerateInstanceExtensionProperties);
GET_PROC_ADDR (*vk, CreateInstance);
}
void
vk_api_load_from_instance (struct vk_api* vk, VkInstance* instance)
{
assert (instance != VK_NULL_HANDLE);
if (vk->GetInstanceProcAddr == NULL)
vk_api_load_from_icd (vk);
/* load instance-dependent API entry points */
GET_INSTANCE_PROC_ADDR (*vk, *instance, GetDeviceProcAddr);
GET_INSTANCE_PROC_ADDR (*vk, *instance, DestroyInstance);
GET_INSTANCE_PROC_ADDR (*vk, *instance, EnumeratePhysicalDevices);
GET_INSTANCE_PROC_ADDR (*vk, *instance, GetPhysicalDeviceQueueFamilyProperties);
GET_INSTANCE_PROC_ADDR (*vk, *instance, CreateDevice);
GET_INSTANCE_PROC_ADDR (*vk, *instance, EnumerateDeviceExtensionProperties);
GET_INSTANCE_PROC_ADDR (*vk, *instance, GetPhysicalDeviceProperties);
GET_INSTANCE_PROC_ADDR (*vk, *instance, DestroySurfaceKHR);
GET_INSTANCE_PROC_ADDR (*vk, *instance, GetPhysicalDeviceSurfaceSupportKHR);
GET_INSTANCE_PROC_ADDR (*vk, *instance, GetPhysicalDeviceSurfaceFormatsKHR);
GET_INSTANCE_PROC_ADDR (*vk, *instance,
GetPhysicalDeviceSurfacePresentModesKHR);
GET_INSTANCE_PROC_ADDR (*vk, (*instance),
GetPhysicalDeviceSurfaceCapabilitiesKHR);
#ifdef VK_USE_PLATFORM_XCB_KHR
GET_INSTANCE_PROC_ADDR (*vk, *instance, CreateXcbSurfaceKHR);
#endif
}
void
vk_api_load_from_device (struct vk_api* vk, VkDevice* device)
{
assert (device != VK_NULL_HANDLE);
assert (vk->GetDeviceProcAddr != NULL);
/* load device-dependent API entry points */
GET_DEVICE_PROC_ADDR (*vk, *device, CreateCommandPool);
GET_DEVICE_PROC_ADDR (*vk, *device, CmdBeginRenderPass);
GET_DEVICE_PROC_ADDR (*vk, *device, CmdDraw);
GET_DEVICE_PROC_ADDR (*vk, *device, CmdEndRenderPass);
GET_DEVICE_PROC_ADDR (*vk, *device, AllocateCommandBuffers);
GET_DEVICE_PROC_ADDR (*vk, *device, FreeCommandBuffers);
GET_DEVICE_PROC_ADDR (*vk, *device, GetDeviceQueue);
GET_DEVICE_PROC_ADDR (*vk, *device, CreateRenderPass);
GET_DEVICE_PROC_ADDR (*vk, *device, DestroyRenderPass);
GET_DEVICE_PROC_ADDR (*vk, *device, DestroyCommandPool);
GET_DEVICE_PROC_ADDR (*vk, *device, DestroyDevice);
GET_DEVICE_PROC_ADDR (*vk, *device, CreateGraphicsPipelines);
GET_DEVICE_PROC_ADDR (*vk, *device, DestroyPipeline);
GET_DEVICE_PROC_ADDR (*vk, *device, CreateShaderModule);
GET_DEVICE_PROC_ADDR (*vk, *device, DestroyShaderModule);
GET_DEVICE_PROC_ADDR (*vk, *device, CreatePipelineLayout);
GET_DEVICE_PROC_ADDR (*vk, *device, DestroyPipelineLayout);
GET_DEVICE_PROC_ADDR (*vk, *device, CreateImageView);
GET_DEVICE_PROC_ADDR (*vk, *device, DestroyImageView);
GET_DEVICE_PROC_ADDR (*vk, *device, CreateFramebuffer);
GET_DEVICE_PROC_ADDR (*vk, *device, DestroyFramebuffer);
GET_DEVICE_PROC_ADDR (*vk, *device, BeginCommandBuffer);
GET_DEVICE_PROC_ADDR (*vk, *device, EndCommandBuffer);
GET_DEVICE_PROC_ADDR (*vk, *device, CmdBindPipeline);
GET_DEVICE_PROC_ADDR (*vk, *device, CreateSemaphore);
GET_DEVICE_PROC_ADDR (*vk, *device, DestroySemaphore);
GET_DEVICE_PROC_ADDR (*vk, *device, QueueSubmit);
GET_DEVICE_PROC_ADDR (*vk, *device, DeviceWaitIdle);
GET_DEVICE_PROC_ADDR (*vk, *device, CreateSwapchainKHR);
GET_DEVICE_PROC_ADDR (*vk, *device, DestroySwapchainKHR);
GET_DEVICE_PROC_ADDR (*vk, *device, GetSwapchainImagesKHR);
GET_DEVICE_PROC_ADDR (*vk, *device, AcquireNextImageKHR);
GET_DEVICE_PROC_ADDR (*vk, *device, QueuePresentKHR);
}