1 /*
2 ** Copyright (c) 2015-2016 The Khronos Group Inc.
3 **
4 ** Permission is hereby granted, free of charge, to any person obtaining a
5 ** copy of this software and/or associated documentation files (the
6 ** "Materials"), to deal in the Materials without restriction, including
7 ** without limitation the rights to use, copy, modify, merge, publish,
8 ** distribute, sublicense, and/or sell copies of the Materials, and to
9 ** permit persons to whom the Materials are furnished to do so, subject to
10 ** the following conditions:
11 **
12 ** The above copyright notice and this permission notice shall be included
13 ** in all copies or substantial portions of the Materials.
14 **
15 ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22 */
23 module derelict.vulkan.base;
24 extern(System):
25 
26 //#include "vk_platform.h"
27 
28 auto VK_MAKE_VERSION(int major, int minor, int patch) {
29   return (major << 22) | (minor << 12) | patch;
30 }
31 
32 auto VK_VERSION_MAJOR(uint ver) {
33   return ver >> 22;
34 }
35 
36 auto VK_VERSION_MINOR(uint ver) {
37   return (ver >> 12) & 0x3ff;
38 }
39 
40 auto VK_VERSION_PATCH(uint ver) {
41   return ver & 0xfff;
42 }
43 
44 package auto VK_DEFINE_HANDLE(string name) {
45   return "struct " ~ name ~ "_T; \n alias " ~ name ~ " = " ~ name ~ "_T*;";
46 }
47 
48 package auto VK_DEFINE_NON_DISPATCHABLE_HANDLE(string name) {
49   // #if defined(__LP64__)    || defined(_WIN64) 
50   //  || defined(__x86_64__)  || defined(_M_X64) 
51   //  || defined(__ia64)      || defined (_M_IA64) 
52   //  || defined(__aarch64__) || defined(__powerpc64__)
53   return VK_DEFINE_HANDLE(name);
54 }
55 
56 alias VkFlags      = uint;
57 alias VkBool32     = uint;
58 alias VkDeviceSize = ulong;
59 alias VkSampleMask = uint;
60 
61 enum VK_VERSION_1_0 = 1;
62 enum VK_API_VERSION = VK_MAKE_VERSION(1, 0, 3); // Vulkan API version supported by this file
63 enum VK_NULL_HANDLE = null;
64 
65 enum VK_TRUE  = 1;
66 enum VK_FALSE = 0;
67 
68 enum VK_UUID_SIZE  = 16;
69 enum VK_WHOLE_SIZE = (~0UL);
70 
71 enum VK_LOD_CLAMP_NONE    = 1000.0f;
72 enum VK_ATTACHMENT_UNUSED = (~0U);
73 enum VK_SUBPASS_EXTERNAL  = (~0U);
74 
75 enum VK_QUEUE_FAMILY_IGNORED   = (~0U);
76 enum VK_REMAINING_MIP_LEVELS   = (~0U);
77 enum VK_REMAINING_ARRAY_LAYERS = (~0U);
78 
79 enum VK_MAX_MEMORY_TYPES        = 32;
80 enum VK_MAX_MEMORY_HEAPS        = 16;
81 enum VK_MAX_EXTENSION_NAME_SIZE = 256;
82 enum VK_MAX_DESCRIPTION_SIZE    = 256;
83 enum VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256;