]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/vkxlib/vulkancontext_platform.h
Add a class for creating Vulkan graphics contexts
[libs/gui.git] / source / graphics / vkxlib / vulkancontext_platform.h
diff --git a/source/graphics/vkxlib/vulkancontext_platform.h b/source/graphics/vkxlib/vulkancontext_platform.h
new file mode 100644 (file)
index 0000000..9c08c96
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef MSP_GRAPHICS_VULKANCONTEXT_PLATFORM_H_
+#define MSP_GRAPHICS_VULKANCONTEXT_PLATFORM_H_
+
+#define VK_USE_PLATFORM_XLIB_KHR
+#include <vulkan/vulkan.h>
+#include "vulkancontext.h"
+
+namespace Msp {
+namespace Graphics {
+
+struct VulkanFunctions
+{
+       PFN_vkCreateInstance vkCreateInstance;
+       PFN_vkDestroyInstance vkDestroyInstance;
+       PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
+       PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;
+       PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupport;
+       PFN_vkCreateDevice vkCreateDevice;
+       PFN_vkDestroyDevice vkDestroyDevice;
+       PFN_vkGetDeviceQueue vkGetDeviceQueue;
+       PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurface;
+       PFN_vkDestroySurfaceKHR vkDestroySurface;
+       PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallback;
+       PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallback;
+};
+
+struct VulkanContext::Private
+{
+       VulkanFunctions functions;
+       VkInstance instance;
+       VkPhysicalDevice physical_device;
+       VkDevice device;
+       unsigned graphics_queue_family;
+       VkQueue graphics_queue;
+       VkSurfaceKHR surface;
+       VkDebugReportCallbackEXT debug_report_callback;
+
+       Private();
+
+       static VkBool32 debug_report_func(VkDebugReportFlagsEXT, VkDebugReportObjectTypeEXT, uint64_t, size_t, int32_t, const char *, const char *, void *);
+};
+
+} // namespace Graphics
+} // namespace Msp
+
+#endif