| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- /*
- Boost Software License - Version 1.0 - August 17th, 2003
- Permission is hereby granted, free of charge, to any person or organization
- obtaining a copy of the software and accompanying documentation covered by
- this license (the "Software") to use, reproduce, display, distribute,
- execute, and transmit the Software, and to prepare derivative works of the
- Software, and to permit third-parties to whom the Software is furnished to
- do so, all subject to the following:
- The copyright notices in the Software and this entire statement, including
- the above license grant, this restriction and the following disclaimer,
- must be included in all copies of the Software, in whole or in part, and
- all derivative works of the Software, unless such copies or derivative
- works are solely in the form of machine-executable object code generated by
- a source language processor.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
- */
- module derelict.vulkan.system;
- public import derelict.vulkan.base;
- public import derelict.vulkan.types;
- import derelict.util.system;
- enum VKSystem {
- Other = 0,
- Windows = 1 << 0,
- Android = 1 << 1,
- Posix = 1 << 2
- }
- mixin SystemFunctionality;
- private:
- import std.conv;
- auto derelictVulkanSystem() {
- static if (Derelict_OS_Posix) {
- return VKSystem.Posix;
- } else static if (Derelict_OS_Windows) {
- return VKSystem.Windows;
- } else static if (Derelict_OS_Android) {
- return VKSystem.Android;
- } else {
- pragma(msg, "Non of currently supported systems is fit to yours. "
- , "If required functionality is missed, feel free to extend and share on GitHub.");
- return VKSystem.Other;
- }
- }
- mixin template DummyFunctions() {
- pragma(inline, true)
- void bindFunctions(alias bind)() {}
- }
- mixin template SystemFunctionality() {
- extern(System):
- enum currentSystem = derelictVulkanSystem();
- pragma(msg, "DerelictVulkanSystem: ", to!string(currentSystem));
- static if (currentSystem == VKSystem.Windows) {
- mixin WindowsSys;
- } else static if (currentSystem == VKSystem.Android) {
- mixin AndroidSys;
- } else static if (currentSystem == VKSystem.Posix) {
- mixin PosixSys;
- } else {
- enum libNames = "";
- package alias Functions = DummyFunctions;
- }
- }
- mixin template WindowsSys() {
- import core.sys.windows.windows;
- enum libNames = "vulkan-1.dll";
- enum VK_KHR_win32_surface = 1;
- enum VK_KHR_WIN32_SURFACE_SPEC_VERSION = 5;
- enum VK_KHR_WIN32_SURFACE_EXTENSION_NAME = "VK_KHR_win32_surface";
- alias VkWin32SurfaceCreateFlagsKHR = VkFlags;
- struct VkWin32SurfaceCreateInfoKHR {
- VkStructureType sType ;
- const(void)* pNext ;
- VkWin32SurfaceCreateFlagsKHR flags ;
- HINSTANCE hinstance;
- HWND hwnd ;
- }
- alias PFN_vkCreateWin32SurfaceKHR = nothrow
- VkResult function( VkInstance instance
- , const(VkWin32SurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
- alias PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR = nothrow
- VkBool32 function( VkPhysicalDevice physicalDevice, uint queueFamilyIndex );
- mixin template Functions() {
- PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR;
- PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR;
- pragma(inline, true)
- void bindFunctions(alias bind)() {
- bind(cast(void**)&vkCreateWin32SurfaceKHR, "vkCreateWin32SurfaceKHR");
- bind( cast(void**)&vkGetPhysicalDeviceWin32PresentationSupportKHR
- , "vkGetPhysicalDeviceWin32PresentationSupportKHR");
- }
- }
- version (none) {
- VkResult vkCreateWin32SurfaceKHR( VkInstance instance
- , const(VkWin32SurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
- VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR( VkPhysicalDevice physicalDevice, uint queueFamilyIndex );
- }
- }
- mixin template AndroidSys() {
- enum libNames = "";
- // #include <android/native_window.h>
- enum VK_KHR_android_surface = 1;
- enum VK_KHR_ANDROID_SURFACE_SPEC_VERSION = 6;
- enum VK_KHR_ANDROID_SURFACE_EXTENSION_NAME = "VK_KHR_android_surface";
- alias VkAndroidSurfaceCreateFlagsKHR = VkFlags;
- struct VkAndroidSurfaceCreateInfoKHR {
- VkStructureType sType ;
- const(void)* pNext ;
- VkAndroidSurfaceCreateFlagsKHR flags ;
- ANativeWindow* window;
- }
- alias PFN_vkCreateAndroidSurfaceKHR = nothrow
- VkResult function( VkInstance instance
- , const(VkAndroidSurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
-
- mixin template Functions() {
- PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
- pragma(inline, true)
- void bindFunctions(alias bind)() {
- bind(cast(void**)&vkCreateAndroidSurfaceKHR, "vkCreateAndroidSurfaceKHR");
- }
- }
-
- version (none) {
- VkResult vkCreateAndroidSurfaceKHR( VkInstance instance
- , const(VkAndroidSurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface);
- }
- }
- mixin template PosixSys() {
- enum libNames = "libvulkan.so,libvulkan.so.1";
- version (VK_USE_PLATFORM_XCB_KHR) mixin XCBProtocol ;
- version (VK_USE_PLATFORM_XLIB_KHR) mixin XLibProtocol ;
- version (VK_USE_PLATFORM_MIR_KHR) mixin MirProtocol ;
- version (VK_USE_PLATFORM_WAYLAND_KHR) mixin WaylandProtocol;
- else {
- pragma(msg, "Non protocol been selected for Posix system.");
- package alias Functions = DummyFunctions;
- }
- }
- mixin template XCBProtocol() {
- import xcb.xcb;
- enum VK_KHR_xcb_surface = 1;
- enum VK_KHR_XCB_SURFACE_SPEC_VERSION = 6;
- enum VK_KHR_XCB_SURFACE_EXTENSION_NAME = "VK_KHR_xcb_surface";
- alias VkXcbSurfaceCreateFlagsKHR = VkFlags;
- struct VkXcbSurfaceCreateInfoKHR {
- VkStructureType sType ;
- const(void)* pNext ;
- VkXcbSurfaceCreateFlagsKHR flags ;
- xcb_connection_t* connection;
- xcb_window_t window ;
- }
- alias PFN_vkCreateXcbSurfaceKHR = nothrow
- VkResult function( VkInstance instance
- , const(VkXcbSurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
- alias PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR = nothrow
- VkBool32 function( VkPhysicalDevice physicalDevice
- , uint queueFamilyIndex
- , xcb_connection_t* connection
- , xcb_visualid_t visual_id );
- mixin template Functions() {
- PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR;
- PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR;
- pragma(inline, true)
- void bindFunctions(alias bind)() {
- bind(cast(void**)&vkCreateXcbSurfaceKHR, "vkCreateXcbSurfaceKHR");
- bind( cast(void**)&vkGetPhysicalDeviceXcbPresentationSupportKHR
- , "vkGetPhysicalDeviceXcbPresentationSupportKHR" );
- }
- }
- version (none) {
- VkResult vkCreateXcbSurfaceKHR( VkInstance instance
- , const(VkXcbSurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
- VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR( VkPhysicalDevice physicalDevice
- , uint queueFamilyIndex
- , xcb_connection_t* connection
- , xcb_visualid_t visual_id);
- }
- }
- mixin template XLibProtocol() {
- import X11.Xlib;
- enum VK_KHR_xlib_surface = 1;
- enum VK_KHR_XLIB_SURFACE_SPEC_VERSION = 6;
- enum VK_KHR_XLIB_SURFACE_EXTENSION_NAME = "VK_KHR_xlib_surface";
- alias VkXlibSurfaceCreateFlagsKHR = VkFlags;
- struct VkXlibSurfaceCreateInfoKHR {
- VkStructureType sType ;
- const(void)* pNext ;
- VkXlibSurfaceCreateFlagsKHR flags ;
- Display* dpy ;
- Window window;
- }
- alias PFN_vkCreateXlibSurfaceKHR = nothrow
- VkResult function( VkInstance instance
- , const(VkXlibSurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
- alias PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR = nothrow
- VkBool32 function( VkPhysicalDevice physicalDevice
- , uint queueFamilyIndex
- , Display* dpy
- , VisualID visualID);
- mixin template Functions() {
- PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR;
- PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR;
- pragma(inline, true)
- void bindFunctions(alias bind)() {
- bind(cast(void**)&vkCreateXlibSurfaceKHR, "vkCreateXlibSurfaceKHR");
- bind( cast(void**)&vkGetPhysicalDeviceXlibPresentationSupportKHR
- , "vkGetPhysicalDeviceXlibPresentationSupportKHR" );
- }
- }
- version (none) {
- VkResult vkCreateXlibSurfaceKHR( VkInstance instance
- , const(VkXlibSurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
- VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR( VkPhysicalDevice physicalDevice
- , uint queueFamilyIndex
- , Display* dpy
- , VisualID visualID );
- }
- }
- mixin template MirProtocol() {
- //TODO: add import of data related to Mir protocol
- // #include <mir_toolkit/client_types.h>
- enum VK_KHR_mir_surface = 1;
- enum VK_KHR_MIR_SURFACE_SPEC_VERSION = 4;
- enum VK_KHR_MIR_SURFACE_EXTENSION_NAME = "VK_KHR_mir_surface";
- alias VkMirSurfaceCreateFlagsKHR = VkFlags;
- struct VkMirSurfaceCreateInfoKHR {
- VkStructureType sType ;
- const(void)* pNext ;
- VkMirSurfaceCreateFlagsKHR flags ;
- MirConnection* connection;
- MirSurface* mirSurface;
- }
- alias PFN_vkCreateMirSurfaceKHR = nothrow
- VkResult function( VkInstance instance
- , const(VkMirSurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
- alias PFN_vkGetPhysicalDeviceMirPresentationSupportKHR = nothrow
- VkBool32 function( VkPhysicalDevice physicalDevice
- , uint queueFamilyIndex
- , MirConnection* connection);
- mixin template Functions() {
- PFN_vkCreateMirSurfaceKHR vkCreateMirSurfaceKHR;
- PFN_vkGetPhysicalDeviceMirPresentationSupportKHR vkGetPhysicalDeviceMirPresentationSupportKHR;
- pragma(inline, true)
- void bindFunctions(alias bind)() {
- bind(cast(void**)&vkCreateMirSurfaceKHR, "vkCreateMirSurfaceKHR");
- bind( cast(void**)&vkGetPhysicalDeviceMirPresentationSupportKHR
- , "vkGetPhysicalDeviceMirPresentationSupportKHR");
- }
- }
- version (none) {
- VkResult vkCreateMirSurfaceKHR( VkInstance instance
- , const(VkMirSurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
- VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR( VkPhysicalDevice physicalDevice
- , uint queueFamilyIndex
- , MirConnection* connection );
- }
- }
- mixin template WaylandProtocol() {
- //TODO: add import of data related to Wayland protocol
- // #include <wayland-client.h>
- enum VK_KHR_wayland_surface = 1;
- enum VK_KHR_WAYLAND_SURFACE_SPEC_VERSION = 5;
- enum VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME = "VK_KHR_wayland_surface";
- alias VkWaylandSurfaceCreateFlagsKHR = VkFlags;
- struct VkWaylandSurfaceCreateInfoKHR {
- VkStructureType sType ;
- const(void)* pNext ;
- VkWaylandSurfaceCreateFlagsKHR flags ;
- wl_display* display;
- wl_surface* surface;
- }
- alias PFN_vkCreateWaylandSurfaceKHR = nothrow
- VkResult function( VkInstance instance
- , const(VkWaylandSurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
- alias PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR = nothrow
- VkBool32 function( VkPhysicalDevice physicalDevice
- , uint queueFamilyIndex
- , wl_display* display );
- mixin template Functions() {
- PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR;
- PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR;
- pragma(inline, true)
- void bindFunctions(alias bind)() {
- bind(cast(void**)&vkCreateWaylandSurfaceKHR, "vkCreateWaylandSurfaceKHR");
- bind( cast(void**)&vkGetPhysicalDeviceWaylandPresentationSupportKHR
- , "vkGetPhysicalDeviceWaylandPresentationSupportKHR" );
- }
- }
- version (none) {
- VkResult vkCreateWaylandSurfaceKHR( VkInstance instance
- , const(VkWaylandSurfaceCreateInfoKHR)* pCreateInfo
- , const(VkAllocationCallbacks)* pAllocator
- , VkSurfaceKHR* pSurface );
- VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR( VkPhysicalDevice physicalDevice
- , uint queueFamilyIndex
- , wl_display* display );
- }
- }
|