update from xcb to xlib

This commit is contained in:
Matthew 2025-11-30 16:28:46 +11:00
parent f96d30ae9c
commit 6bd4718063
4 changed files with 27 additions and 25 deletions

View File

@ -4,11 +4,12 @@
#define VMA_VULKAN_VERSION 1002000 #define VMA_VULKAN_VERSION 1002000
#ifdef __linux__ #ifdef __linux__
#define VK_USE_PLATFORM_XCB_KHR # define XLIB_ILLEGAL_ACCESS
# define VK_USE_PLATFORM_XLIB_KHR
#elif _WIN32 #elif _WIN32
#define VK_USE_PLATFORM_WIN32_KHR # define VK_USE_PLATFORM_WIN32_KHR
#else #else
#error not yet implemented # error not yet implemented
#endif #endif
#include "vk_mem_alloc.h" #include "vk_mem_alloc.h"

View File

@ -52,19 +52,20 @@ const DESC_ARRAY_SIZE = 256;
version(linux) version(linux)
{ {
const string[] VULKAN_LIBS = [ "libvulkan.so.1", "libvulkan.so" ]; const string[] VULKAN_LIBS = [ "libvulkan.so.1", "libvulkan.so" ];
struct PlatformHandles
{
xcb_connection_t *conn;
xcb_window_t window;
}
} }
version(Windows) version(Windows)
{ {
const string[] VULKAN_LIBS = [ "vulkan-1.dll" ]; const string[] VULKAN_LIBS = [ "vulkan-1.dll" ];
}
struct PlatformHandles struct PlatformHandles
{
version(linux)
{
Display* display;
Window window;
}
version(Windows)
{ {
HINSTANCE hinstance; HINSTANCE hinstance;
HWND hwnd; HWND hwnd;
@ -76,7 +77,7 @@ const char*[] VK_INSTANCE_LAYERS_DEBUG = [ "VK_LAYER_KHRONOS_validation" ];
version(linux) version(linux)
{ {
const char*[] VK_INSTANCE_EXT = [ cast(char*)VK_KHR_SURFACE_EXTENSION_NAME, cast(char*)VK_KHR_XCB_SURFACE_EXTENSION_NAME ]; const char*[] VK_INSTANCE_EXT = [ cast(char*)VK_KHR_SURFACE_EXTENSION_NAME, cast(char*)VK_KHR_XLIB_SURFACE_EXTENSION_NAME ];
const char*[] VK_INSTANCE_EXT_DEBUG = VK_INSTANCE_EXT ~ [ cast(char*)VK_EXT_DEBUG_UTILS_EXTENSION_NAME ]; const char*[] VK_INSTANCE_EXT_DEBUG = VK_INSTANCE_EXT ~ [ cast(char*)VK_EXT_DEBUG_UTILS_EXTENSION_NAME ];
} }
@ -2659,13 +2660,13 @@ Init(PlatformHandles platform_handles, u64 permanent_mem, u64 frame_mem)
{ {
version(linux) version(linux)
{ {
VkXcbSurfaceCreateInfoKHR surface_info = { VkXlibSurfaceCreateInfoKHR surface_info = {
sType: VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR, sType: VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
connection: vk.platform_handles.conn, dpy: vk.platform_handles.display,
window: vk.platform_handles.window, window: vk.platform_handles.window,
}; };
VkResult result = vkCreateXcbSurfaceKHR(vk.instance, &surface_info, null, &vk.surface); VkResult result = vkCreateXlibSurfaceKHR(vk.instance, &surface_info, null, &vk.surface);
} }
version(Windows) version(Windows)

View File

@ -35,7 +35,7 @@ version(VULKAN_DEBUG)
version(linux) version(linux)
{ {
PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR = null; PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR = null;
}; };
version(Windows) version(Windows)
@ -232,7 +232,7 @@ LoadInstanceFunctions(Vulkan* vk)
version(linux) version(linux)
{ {
vkCreateXcbSurfaceKHR = cast(PFN_vkCreateXcbSurfaceKHR)vkGetInstanceProcAddr(vk.instance, "vkCreateXcbSurfaceKHR"); vkCreateXlibSurfaceKHR = cast(PFN_vkCreateXlibSurfaceKHR)vkGetInstanceProcAddr(vk.instance, "vkCreateXlibSurfaceKHR");
} }
version(Windows) version(Windows)

View File

@ -1,9 +1,9 @@
#pragma attribute(push, nogc, nothrow) #pragma attribute(push, nogc, nothrow)
#ifdef __linux__ #ifdef __linux__
# include <xcb/xcb.h> # define XLIB_ILLEGAL_ACCESS
# define VK_USE_PLATFORM_XLIB_KHR
# include <X11/Xlib.h> # include <X11/Xlib.h>
# define VK_USE_PLATFORM_XCB_KHR
#endif #endif
#ifdef _WIN32 #ifdef _WIN32