From f54e78c3f83c8c5d660077b6284ab2186aa0bac9 Mon Sep 17 00:00:00 2001 From: Eduardo Lima Mitev Date: Wed, 28 Sep 2016 19:13:38 +0200 Subject: [PATCH] vulkan-triangle: Use the new Vulkan API loader helper --- vulkan-triangle/Makefile | 4 +- vulkan-triangle/main.c | 130 ++------------------------------------- 2 files changed, 8 insertions(+), 126 deletions(-) diff --git a/vulkan-triangle/Makefile b/vulkan-triangle/Makefile index 697e2f6..6d0feee 100644 --- a/vulkan-triangle/Makefile +++ b/vulkan-triangle/Makefile @@ -13,13 +13,15 @@ vert.spv: shader.vert frag.spv: shader.frag $(GLSL_VALIDATOR) -V shader.frag -$(TARGET): main.c vert.spv frag.spv +$(TARGET): main.c vert.spv frag.spv \ + common/vk-api.h common/vk-api.c gcc -ggdb -O0 -Wall -std=c99 \ -DCURRENT_DIR=\"`pwd`\" \ `pkg-config --libs --cflags xcb` \ -L $(VULKAN_SO_PATH) \ -l$(VULKAN_SO_NAME) \ -o $(TARGET) \ + common/vk-api.c \ main.c clean: diff --git a/vulkan-triangle/main.c b/vulkan-triangle/main.c index 67d1984..985f6a1 100644 --- a/vulkan-triangle/main.c +++ b/vulkan-triangle/main.c @@ -33,83 +33,14 @@ #define VK_USE_PLATFORM_XCB_KHR #include +#include "common/vk-api.h" #define WIDTH 640 #define HEIGHT 480 -PFN_vkVoidFunction vk_icdGetInstanceProcAddr (VkInstance instance, - const char* pName); - +static struct vk_api vk = { NULL, }; static const VkAllocationCallbacks* allocator = VK_NULL_HANDLE; -#define GET_ICD_PROC_ADDR(api, symbol) \ - api.symbol = (PFN_vk ##symbol) vk_icdGetInstanceProcAddr(NULL, "vk" #symbol); - -#define GET_PROC_ADDR(api, symbol) \ - api.symbol = (PFN_vk ##symbol) api.GetInstanceProcAddr(NULL, "vk" #symbol); - -#define GET_INSTANCE_PROC_ADDR(api, instance, symbol) \ - api.symbol = (PFN_vk ##symbol) api.GetInstanceProcAddr(instance, "vk" #symbol); - -#define GET_DEVICE_PROC_ADDR(api, device, symbol) \ - api.symbol = (PFN_vk ##symbol) api.GetDeviceProcAddr(device, "vk" #symbol); - -struct vk_api { - PFN_vkGetInstanceProcAddr GetInstanceProcAddr; - PFN_vkGetDeviceProcAddr GetDeviceProcAddr; - PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties; - PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties; - PFN_vkCreateInstance CreateInstance; - PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices; - PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties; - PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties; - PFN_vkCreateDevice CreateDevice; - PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties; - PFN_vkGetDeviceQueue GetDeviceQueue; - PFN_vkCreateCommandPool CreateCommandPool; - PFN_vkAllocateCommandBuffers AllocateCommandBuffers; - PFN_vkFreeCommandBuffers FreeCommandBuffers; - PFN_vkCreateRenderPass CreateRenderPass; - PFN_vkDestroyRenderPass DestroyRenderPass; - PFN_vkDestroyCommandPool DestroyCommandPool; - PFN_vkDestroyDevice DestroyDevice; - PFN_vkDestroyInstance DestroyInstance; - PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines; - PFN_vkDestroyPipeline DestroyPipeline; - PFN_vkCreateShaderModule CreateShaderModule; - PFN_vkDestroyShaderModule DestroyShaderModule; - PFN_vkCreatePipelineLayout CreatePipelineLayout; - PFN_vkDestroyPipelineLayout DestroyPipelineLayout; - PFN_vkCreateImageView CreateImageView; - PFN_vkDestroyImageView DestroyImageView; - PFN_vkCreateFramebuffer CreateFramebuffer; - PFN_vkDestroyFramebuffer DestroyFramebuffer; - PFN_vkBeginCommandBuffer BeginCommandBuffer; - PFN_vkEndCommandBuffer EndCommandBuffer; - PFN_vkCmdBeginRenderPass CmdBeginRenderPass; - PFN_vkCmdBindPipeline CmdBindPipeline; - PFN_vkCmdDraw CmdDraw; - PFN_vkCmdEndRenderPass CmdEndRenderPass; - PFN_vkCreateSemaphore CreateSemaphore; - PFN_vkDestroySemaphore DestroySemaphore; - PFN_vkQueueSubmit QueueSubmit; - PFN_vkDeviceWaitIdle DeviceWaitIdle; - - PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR; - PFN_vkDestroySurfaceKHR DestroySurfaceKHR; - PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR; - PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR; - PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR; - PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR; - PFN_vkCreateSwapchainKHR CreateSwapchainKHR; - PFN_vkDestroySwapchainKHR DestroySwapchainKHR; - PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR; - PFN_vkAcquireNextImageKHR AcquireNextImageKHR; - PFN_vkQueuePresentKHR QueuePresentKHR; -}; - -static struct vk_api vk; - struct vk_objects { VkPhysicalDevice physical_device; VkDevice device; @@ -934,10 +865,7 @@ main (int argc, char* argv[]) /* ======================================================================= */ /* load API entry points from ICD */ - GET_ICD_PROC_ADDR (vk, GetInstanceProcAddr); - GET_PROC_ADDR (vk, EnumerateInstanceLayerProperties); - GET_PROC_ADDR (vk, EnumerateInstanceExtensionProperties); - GET_PROC_ADDR (vk, CreateInstance); + vk_api_load_from_icd (&vk); /* enummerate available layers */ uint32_t layers_count; @@ -998,21 +926,7 @@ main (int argc, char* argv[]) printf ("Vulkan instance created\n"); /* load instance-dependent API entry points */ - 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, CreateXcbSurfaceKHR); - 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); + vk_api_load_from_instance (&vk, &instance); /* query physical devices */ uint32_t num_devices = 5; @@ -1170,41 +1084,7 @@ main (int argc, char* argv[]) config.present_mode = present_mode; /* load device-dependent API entry points */ - GET_INSTANCE_PROC_ADDR (vk, instance, GetDeviceProcAddr); - 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); + vk_api_load_from_device (&vk, &device); /* create the vertex shader module */ size_t shader_code_size;