aboutsummaryrefslogtreecommitdiff
path: root/tools/Vulkan-Tools/cube/xcb_loader.h
diff options
context:
space:
mode:
authorLizzy Fleckenstein <lizzy@vlhl.dev>2026-03-31 01:30:36 +0200
committerLizzy Fleckenstein <lizzy@vlhl.dev>2026-03-31 01:30:36 +0200
commit8e2ff15dbd3fe70fe2b52397b1eaba3fe2d7a5e8 (patch)
tree925fa596210d1a1f01e00e0743a643f4552e7a7a /tools/Vulkan-Tools/cube/xcb_loader.h
parent1f17b4df127bd280e50d93a46ae93df704adc2b0 (diff)
parent90bf5bc4fd8bea0d300f6564af256a51a34124b8 (diff)
downloadusermoji-8e2ff15dbd3fe70fe2b52397b1eaba3fe2d7a5e8.tar.xz
add tools/Vulkan-Tools
Diffstat (limited to 'tools/Vulkan-Tools/cube/xcb_loader.h')
-rw-r--r--tools/Vulkan-Tools/cube/xcb_loader.h126
1 files changed, 126 insertions, 0 deletions
diff --git a/tools/Vulkan-Tools/cube/xcb_loader.h b/tools/Vulkan-Tools/cube/xcb_loader.h
new file mode 100644
index 00000000..cecd2540
--- /dev/null
+++ b/tools/Vulkan-Tools/cube/xcb_loader.h
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2024 The Khronos Group Inc.
+ * Copyright (c) 2024 Valve Corporation
+ * Copyright (c) 2024 LunarG, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Author: Charles Giessen <charles@lunarg.com>
+ */
+
+#pragma once
+
+#include <dlfcn.h>
+#include <stdlib.h>
+
+#include <xcb/xcb.h>
+
+typedef xcb_void_cookie_t (*PFN_xcb_destroy_window)(xcb_connection_t *c, xcb_window_t window);
+typedef void (*PFN_xcb_disconnect)(xcb_connection_t *c);
+typedef int (*PFN_xcb_flush)(xcb_connection_t *c);
+typedef xcb_generic_event_t *(*PFN_xcb_wait_for_event)(xcb_connection_t *c);
+typedef xcb_generic_event_t *(*PFN_xcb_poll_for_event)(xcb_connection_t *c);
+typedef uint32_t (*PFN_xcb_generate_id)(xcb_connection_t *c);
+typedef xcb_void_cookie_t (*PFN_xcb_create_window)(xcb_connection_t *c, uint8_t depth, xcb_window_t wid, xcb_window_t parent,
+ int16_t x, int16_t y, uint16_t width, uint16_t height, uint16_t border_width,
+ uint16_t _class, xcb_visualid_t visual, uint32_t value_mask,
+ const void *value_list);
+typedef xcb_intern_atom_cookie_t (*PFN_xcb_intern_atom)(xcb_connection_t *c, uint8_t only_if_exists, uint16_t name_len,
+ const char *name);
+typedef xcb_intern_atom_reply_t *(*PFN_xcb_intern_atom_reply)(xcb_connection_t *c, xcb_intern_atom_cookie_t cookie /**< */,
+ xcb_generic_error_t **e);
+typedef xcb_void_cookie_t (*PFN_xcb_change_property)(xcb_connection_t *c, uint8_t mode, xcb_window_t window, xcb_atom_t property,
+ xcb_atom_t type, uint8_t format, uint32_t data_len, const void *data);
+typedef xcb_void_cookie_t (*PFN_xcb_map_window)(xcb_connection_t *c, xcb_window_t window);
+typedef xcb_void_cookie_t (*PFN_xcb_configure_window)(xcb_connection_t *c, xcb_window_t window, uint16_t value_mask,
+ const void *value_list);
+typedef xcb_connection_t *(*PFN_xcb_connect)(const char *displayname, int *screenp);
+typedef int (*PFN_xcb_connection_has_error)(xcb_connection_t *c);
+typedef const struct xcb_setup_t *(*PFN_xcb_get_setup)(xcb_connection_t *c);
+typedef xcb_screen_iterator_t (*PFN_xcb_setup_roots_iterator)(const xcb_setup_t *R);
+typedef void (*PFN_xcb_screen_next)(xcb_screen_iterator_t *i);
+
+static PFN_xcb_destroy_window cube_xcb_destroy_window = NULL;
+static PFN_xcb_disconnect cube_xcb_disconnect = NULL;
+static PFN_xcb_flush cube_xcb_flush = NULL;
+static PFN_xcb_wait_for_event cube_xcb_wait_for_event = NULL;
+static PFN_xcb_poll_for_event cube_xcb_poll_for_event = NULL;
+static PFN_xcb_generate_id cube_xcb_generate_id = NULL;
+static PFN_xcb_create_window cube_xcb_create_window = NULL;
+static PFN_xcb_intern_atom cube_xcb_intern_atom = NULL;
+static PFN_xcb_intern_atom_reply cube_xcb_intern_atom_reply = NULL;
+static PFN_xcb_change_property cube_xcb_change_property = NULL;
+static PFN_xcb_map_window cube_xcb_map_window = NULL;
+static PFN_xcb_configure_window cube_xcb_configure_window = NULL;
+static PFN_xcb_connect cube_xcb_connect = NULL;
+static PFN_xcb_connection_has_error cube_xcb_connection_has_error = NULL;
+static PFN_xcb_get_setup cube_xcb_get_setup = NULL;
+static PFN_xcb_setup_roots_iterator cube_xcb_setup_roots_iterator = NULL;
+static PFN_xcb_screen_next cube_xcb_screen_next = NULL;
+
+#define xcb_destroy_window cube_xcb_destroy_window
+#define xcb_disconnect cube_xcb_disconnect
+#define xcb_flush cube_xcb_flush
+#define xcb_wait_for_event cube_xcb_wait_for_event
+#define xcb_poll_for_event cube_xcb_poll_for_event
+#define xcb_generate_id cube_xcb_generate_id
+#define xcb_create_window cube_xcb_create_window
+#define xcb_intern_atom cube_xcb_intern_atom
+#define xcb_intern_atom_reply cube_xcb_intern_atom_reply
+#define xcb_change_property cube_xcb_change_property
+#define xcb_map_window cube_xcb_map_window
+#define xcb_configure_window cube_xcb_configure_window
+#define xcb_connect cube_xcb_connect
+#define xcb_connection_has_error cube_xcb_connection_has_error
+#define xcb_get_setup cube_xcb_get_setup
+#define xcb_setup_roots_iterator cube_xcb_setup_roots_iterator
+#define xcb_screen_next cube_xcb_screen_next
+
+void *initialize_xcb() {
+ void *xcb_library = NULL;
+ if (NULL == xcb_library) {
+ xcb_library = dlopen("libxcb.so.1", RTLD_NOW | RTLD_LOCAL);
+ }
+ if (NULL == xcb_library) {
+ xcb_library = dlopen("libxcb.so", RTLD_NOW | RTLD_LOCAL);
+ }
+ if (NULL == xcb_library) {
+ return NULL;
+ }
+
+#ifdef __cplusplus
+#define TYPE_CONVERSION(type) reinterpret_cast<type>
+#else
+#define TYPE_CONVERSION(type)
+#endif
+
+ cube_xcb_destroy_window = TYPE_CONVERSION(PFN_xcb_destroy_window)(dlsym(xcb_library, "xcb_destroy_window"));
+ cube_xcb_disconnect = TYPE_CONVERSION(PFN_xcb_disconnect)(dlsym(xcb_library, "xcb_disconnect"));
+ cube_xcb_flush = TYPE_CONVERSION(PFN_xcb_flush)(dlsym(xcb_library, "xcb_flush"));
+ cube_xcb_wait_for_event = TYPE_CONVERSION(PFN_xcb_wait_for_event)(dlsym(xcb_library, "xcb_wait_for_event"));
+ cube_xcb_poll_for_event = TYPE_CONVERSION(PFN_xcb_poll_for_event)(dlsym(xcb_library, "xcb_poll_for_event"));
+ cube_xcb_generate_id = TYPE_CONVERSION(PFN_xcb_generate_id)(dlsym(xcb_library, "xcb_generate_id"));
+ cube_xcb_create_window = TYPE_CONVERSION(PFN_xcb_create_window)(dlsym(xcb_library, "xcb_create_window"));
+ cube_xcb_intern_atom = TYPE_CONVERSION(PFN_xcb_intern_atom)(dlsym(xcb_library, "xcb_intern_atom"));
+ cube_xcb_intern_atom_reply = TYPE_CONVERSION(PFN_xcb_intern_atom_reply)(dlsym(xcb_library, "xcb_intern_atom_reply"));
+ cube_xcb_change_property = TYPE_CONVERSION(PFN_xcb_change_property)(dlsym(xcb_library, "xcb_change_property"));
+ cube_xcb_map_window = TYPE_CONVERSION(PFN_xcb_map_window)(dlsym(xcb_library, "xcb_map_window"));
+ cube_xcb_configure_window = TYPE_CONVERSION(PFN_xcb_configure_window)(dlsym(xcb_library, "xcb_configure_window"));
+ cube_xcb_connect = TYPE_CONVERSION(PFN_xcb_connect)(dlsym(xcb_library, "xcb_connect"));
+ cube_xcb_connection_has_error = TYPE_CONVERSION(PFN_xcb_connection_has_error)(dlsym(xcb_library, "xcb_connection_has_error"));
+ cube_xcb_get_setup = TYPE_CONVERSION(PFN_xcb_get_setup)(dlsym(xcb_library, "xcb_get_setup"));
+ cube_xcb_setup_roots_iterator = TYPE_CONVERSION(PFN_xcb_setup_roots_iterator)(dlsym(xcb_library, "xcb_setup_roots_iterator"));
+ cube_xcb_screen_next = TYPE_CONVERSION(PFN_xcb_screen_next)(dlsym(xcb_library, "xcb_screen_next"));
+
+ return xcb_library;
+}