--- /dev/null
+#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