render a first frame
[vulkan-misc.git] / 2d / blit / vk_syms.c
blobe66679f67c986b294354d532781150a4af1218f5
1 #ifndef VK_SYMS_C
2 #define VK_SYMS_C
3 /*
4 * this is public domain without any warranties of any kind
5 * Sylvain BERTRAND
6 */
7 /* XXX: KEEP AN EYE ON ABBREVIATIONS, ALWAYS */
8 #include <dlfcn.h>
9 #include <stdlib.h>
10 #include <xcb.h>
11 #include "app_core_types.h"
12 #include "nyanvk/types.h"
13 #include "vk_app.h"
14 #include "log.h"
15 #include "app_state.c"
16 /*----------------------------------------------------------------------------*/
17 #include "namespace/vk_syms.c"
18 /*----------------------------------------------------------------------------*/
19 VK_GLOBAL_SYMS
20 static void *loader_g; /* we put the dl handle in vk namespace */
21 /*----------------------------------------------------------------------------*/
22 #define INSTANCE_STATIC_SYM(x,y) \
23 dl_##y = vk_get_instance_proc_addr(0, #x); \
24 if (dl_##y == 0) { \
25 LOG("0:MAIN:FATAL:unable to find vulkan " #x "\n"); \
26 exit(1); \
28 static void instance_static_syms(void)
30 INSTANCE_STATIC_SYM(vkEnumerateInstanceVersion,
31 vk_enumerate_instance_version);
32 INSTANCE_STATIC_SYM(vkEnumerateInstanceExtensionProperties,
33 vk_enumerate_instance_ext_props);
34 INSTANCE_STATIC_SYM(vkEnumerateInstanceLayerProperties,
35 vk_enumerate_instance_layer_props);
36 INSTANCE_STATIC_SYM(vkCreateInstance, vk_create_instance);
38 #undef INSTANCE_STATIC_SYM
39 /*----------------------------------------------------------------------------*/
40 #define INSTANCE_SYM(x,y) \
41 dl_##y = vk_get_instance_proc_addr(app_instance, #x); \
42 if (dl_##y == 0) { \
43 LOG("0:MAIN:FATAL:unable to find vulkan " #x "\n"); \
44 exit(1); \
46 static void instance_syms(void)
48 INSTANCE_SYM(vkEnumeratePhysicalDevices, vk_enumerate_phydevs);
49 INSTANCE_SYM(vkEnumerateDeviceExtensionProperties,
50 vk_enumerate_dev_ext_props);
51 INSTANCE_SYM(vkGetPhysicalDeviceProperties2, vk_get_phydev_props);
52 INSTANCE_SYM(vkGetPhysicalDeviceQueueFamilyProperties2,
53 vk_get_phydev_q_fam_props);
54 INSTANCE_SYM(vkCreateDevice, vk_create_dev);
55 /* wsi related -------------------------------------------------------*/
56 INSTANCE_SYM(vkGetPhysicalDeviceSurfaceSupportKHR,
57 vk_get_phydev_surf_support);
58 INSTANCE_SYM(vkGetPhysicalDeviceSurfaceFormats2KHR,
59 vk_get_phydev_surf_texel_mem_blk_confs);
60 INSTANCE_SYM(vkCreateXcbSurfaceKHR, vk_create_xcb_surf);
61 INSTANCE_SYM(vkGetPhysicalDeviceMemoryProperties2,
62 vk_get_phydev_mem_props);
63 INSTANCE_SYM(vkGetPhysicalDeviceSurfaceCapabilities2KHR,
64 vk_get_phydev_surf_caps);
65 INSTANCE_SYM(vkGetPhysicalDeviceSurfacePresentModesKHR,
66 vk_get_phydev_surf_present_modes);
67 /*--------------------------------------------------------------------*/
69 #undef INSTANCE_SYM
70 /*----------------------------------------------------------------------------*/
71 #define DEV_SYM(x,y) \
72 app_surf.dev.dl_##y = vk_get_dev_proc_addr(app_surf.dev.vk, #x); \
73 if (app_surf.dev.dl_##y == 0) { \
74 LOG("0:MAIN:FATAL:unable to find vulkan device " #x "\n"); \
75 exit(1); \
77 static void dev_syms(void)
79 DEV_SYM(vkGetDeviceQueue, vk_get_dev_q);
80 DEV_SYM(vkCreateCommandPool, vk_create_cp);
81 DEV_SYM(vkCreateSwapchainKHR, vk_create_swpchn);
82 DEV_SYM(vkGetSwapchainImagesKHR, vk_get_swpchn_imgs);
83 DEV_SYM(vkCreateImage, vk_create_img);
84 DEV_SYM(vkGetImageMemoryRequirements2KHR, vk_get_img_mem_rqmts);
85 DEV_SYM(vkAllocateMemory, vk_alloc_mem);
86 DEV_SYM(vkBindImageMemory2KHR, vk_bind_img_mem);
87 DEV_SYM(vkMapMemory, vk_map_mem);
88 DEV_SYM(vkAllocateCommandBuffers, vk_alloc_cbs);
89 DEV_SYM(vkBeginCommandBuffer, vk_begin_cb);
90 DEV_SYM(vkEndCommandBuffer, vk_end_cb);
91 DEV_SYM(vkCmdPipelineBarrier, vk_cmd_pl_barrier);
92 DEV_SYM(vkQueueSubmit, vk_q_submit);
93 DEV_SYM(vkQueueWaitIdle, vk_q_wait_idle);
94 DEV_SYM(vkGetImageSubresourceLayout, vk_get_img_subrsrc_layout);
95 DEV_SYM(vkAcquireNextImage2KHR, vk_acquire_next_img);
96 DEV_SYM(vkResetCommandBuffer, vk_reset_cb);
97 DEV_SYM(vkCmdBlitImage, vk_cmd_blit_img);
98 DEV_SYM(vkQueuePresentKHR, vk_q_present);
99 DEV_SYM(vkCreateSemaphore, vk_create_sem);
101 #undef DEVICE_SYM
102 /*----------------------------------------------------------------------------*/
103 #define DLSYM(x, y) \
104 dl_##y = dlsym(loader_g, #x); \
105 if (dl_##y == 0) { \
106 LOG("0:MAIN:FATAL:%s:unable to find " #x "\n", dlerror()); \
107 exit(1); \
109 static void loader_syms(void)
111 DLSYM(vkGetInstanceProcAddr, vk_get_instance_proc_addr);
112 DLSYM(vkGetDeviceProcAddr, vk_get_dev_proc_addr);
114 #undef DLSYM
115 /*----------------------------------------------------------------------------*/
116 static void load_vk_loader(void)
118 /* no '/' in the shared dynamic lib path name, then standard lookup */
119 loader_g = dlopen("libvulkan.so.1", RTLD_LAZY);
120 if (loader_g == 0) {
121 LOG("0:MAIN:FATAL:%s:unable to load the vulkan loader dynamic shared library\n", dlerror());
122 exit(1);
125 /*----------------------------------------------------------------------------*/
126 #define CLEANUP
127 #include "namespace/vk_syms.c"
128 #undef CLEANUP
129 /*----------------------------------------------------------------------------*/
130 #endif /* VK_SYMS_C */