vks/
khr_external_memory_capabilities.rs

1// Copyright (c) 2017, Dennis Hamester <dennis.hamester@startmail.com>
2//
3// Permission to use, copy, modify, and/or distribute this software for any
4// purpose with or without fee is hereby granted, provided that the above
5// copyright notice and this permission notice appear in all copies.
6//
7// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
9// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13// PERFORMANCE OF THIS SOFTWARE.
14
15//! [`VK_KHR_external_memory_capabilities`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VK_KHR_external_memory_capabilities)
16
17use core::ptr;
18use libc::c_void;
19use vk;
20
21pub const VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION: u32 = 1;
22pub const VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME: &'static [u8; 36] = b"VK_KHR_external_memory_capabilities\x00";
23pub const VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME_STR: &'static str = "VK_KHR_external_memory_capabilities";
24
25pub const VK_LUID_SIZE_KHR: usize = 8;
26
27vks_bitflags! {
28    /// See [`VkExternalMemoryHandleTypeFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryHandleTypeFlagBitsKHR)
29    pub struct VkExternalMemoryHandleTypeFlagsKHR: u32 {
30        /// See [`VkExternalMemoryHandleTypeFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryHandleTypeFlagBitsKHR)
31        const VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHR = 0x7fffffff;
32
33        /// See [`VkExternalMemoryHandleTypeFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryHandleTypeFlagBitsKHR)
34        const VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = 0x00000001;
35
36        /// See [`VkExternalMemoryHandleTypeFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryHandleTypeFlagBitsKHR)
37        const VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = 0x00000002;
38
39        /// See [`VkExternalMemoryHandleTypeFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryHandleTypeFlagBitsKHR)
40        const VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = 0x00000004;
41
42        /// See [`VkExternalMemoryHandleTypeFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryHandleTypeFlagBitsKHR)
43        const VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = 0x00000008;
44
45        /// See [`VkExternalMemoryHandleTypeFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryHandleTypeFlagBitsKHR)
46        const VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = 0x00000010;
47
48        /// See [`VkExternalMemoryHandleTypeFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryHandleTypeFlagBitsKHR)
49        const VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = 0x00000020;
50
51        /// See [`VkExternalMemoryHandleTypeFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryHandleTypeFlagBitsKHR)
52        const VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = 0x00000040;
53    }
54}
55
56/// See [`VkExternalMemoryHandleTypeFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryHandleTypeFlagBitsKHR)
57pub type VkExternalMemoryHandleTypeFlagBitsKHR = VkExternalMemoryHandleTypeFlagsKHR;
58
59vks_bitflags! {
60    /// See [`VkExternalMemoryFeatureFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryFeatureFlagBitsKHR)
61    pub struct VkExternalMemoryFeatureFlagsKHR: u32 {
62        /// See [`VkExternalMemoryFeatureFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryFeatureFlagBitsKHR)
63        const VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_KHR = 0x7fffffff;
64
65        /// See [`VkExternalMemoryFeatureFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryFeatureFlagBitsKHR)
66        const VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = 0x00000001;
67
68        /// See [`VkExternalMemoryFeatureFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryFeatureFlagBitsKHR)
69        const VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = 0x00000002;
70
71        /// See [`VkExternalMemoryFeatureFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryFeatureFlagBitsKHR)
72        const VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = 0x00000004;
73    }
74}
75
76/// See [`VkExternalMemoryFeatureFlagBitsKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryFeatureFlagBitsKHR)
77pub type VkExternalMemoryFeatureFlagBitsKHR = VkExternalMemoryFeatureFlagsKHR;
78
79/// See [`VkExternalMemoryPropertiesKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalMemoryPropertiesKHR)
80#[repr(C)]
81#[derive(Debug, Copy, Clone, Default)]
82pub struct VkExternalMemoryPropertiesKHR {
83    pub externalMemoryFeatures: VkExternalMemoryFeatureFlagsKHR,
84    pub exportFromImportedHandleTypes: VkExternalMemoryHandleTypeFlagsKHR,
85    pub compatibleHandleTypes: VkExternalMemoryHandleTypeFlagsKHR,
86}
87
88/// See [`VkPhysicalDeviceExternalImageFormatInfoKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkPhysicalDeviceExternalImageFormatInfoKHR)
89#[repr(C)]
90#[derive(Debug, Copy, Clone)]
91pub struct VkPhysicalDeviceExternalImageFormatInfoKHR {
92    pub sType: vk::VkStructureType,
93    pub pNext: *const c_void,
94    pub handleType: VkExternalMemoryHandleTypeFlagBitsKHR,
95}
96
97impl Default for VkPhysicalDeviceExternalImageFormatInfoKHR {
98    fn default() -> Self {
99        VkPhysicalDeviceExternalImageFormatInfoKHR {
100            sType: vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR,
101            pNext: ptr::null(),
102            handleType: Default::default(),
103        }
104    }
105}
106
107/// See [`VkExternalImageFormatPropertiesKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalImageFormatPropertiesKHR)
108#[repr(C)]
109#[derive(Debug, Copy, Clone)]
110pub struct VkExternalImageFormatPropertiesKHR {
111    pub sType: vk::VkStructureType,
112    pub pNext: *mut c_void,
113    pub externalMemoryProperties: VkExternalMemoryPropertiesKHR,
114}
115
116impl Default for VkExternalImageFormatPropertiesKHR {
117    fn default() -> Self {
118        VkExternalImageFormatPropertiesKHR {
119            sType: vk::VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR,
120            pNext: ptr::null_mut(),
121            externalMemoryProperties: Default::default(),
122        }
123    }
124}
125
126/// See [`VkPhysicalDeviceExternalBufferInfoKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkPhysicalDeviceExternalBufferInfoKHR)
127#[repr(C)]
128#[derive(Debug, Copy, Clone)]
129pub struct VkPhysicalDeviceExternalBufferInfoKHR {
130    pub sType: vk::VkStructureType,
131    pub pNext: *const c_void,
132    pub flags: vk::VkBufferCreateFlags,
133    pub usage: vk::VkBufferUsageFlags,
134    pub handleType: VkExternalMemoryHandleTypeFlagBitsKHR,
135}
136
137impl Default for VkPhysicalDeviceExternalBufferInfoKHR {
138    fn default() -> Self {
139        VkPhysicalDeviceExternalBufferInfoKHR {
140            sType: vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR,
141            pNext: ptr::null(),
142            flags: Default::default(),
143            usage: Default::default(),
144            handleType: Default::default(),
145        }
146    }
147}
148
149/// See [`VkExternalBufferPropertiesKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkExternalBufferPropertiesKHR)
150#[repr(C)]
151#[derive(Debug, Copy, Clone)]
152pub struct VkExternalBufferPropertiesKHR {
153    pub sType: vk::VkStructureType,
154    pub pNext: *mut c_void,
155    pub externalMemoryProperties: VkExternalMemoryPropertiesKHR,
156}
157
158impl Default for VkExternalBufferPropertiesKHR {
159    fn default() -> Self {
160        VkExternalBufferPropertiesKHR {
161            sType: vk::VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR,
162            pNext: ptr::null_mut(),
163            externalMemoryProperties: Default::default(),
164        }
165    }
166}
167
168/// See [`VkPhysicalDeviceIDPropertiesKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkPhysicalDeviceIDPropertiesKHR)
169#[repr(C)]
170#[derive(Debug, Copy, Clone)]
171pub struct VkPhysicalDeviceIDPropertiesKHR {
172    pub sType: vk::VkStructureType,
173    pub pNext: *mut c_void,
174    pub deviceUUID: [u8; vk::VK_UUID_SIZE],
175    pub driverUUID: [u8; vk::VK_UUID_SIZE],
176    pub deviceLUID: [u8; VK_LUID_SIZE_KHR],
177    pub deviceNodeMask: u32,
178    pub deviceLUIDValid: vk::VkBool32,
179}
180
181impl Default for VkPhysicalDeviceIDPropertiesKHR {
182    fn default() -> Self {
183        VkPhysicalDeviceIDPropertiesKHR {
184            sType: vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR,
185            pNext: ptr::null_mut(),
186            deviceUUID: Default::default(),
187            driverUUID: Default::default(),
188            deviceLUID: Default::default(),
189            deviceNodeMask: Default::default(),
190            deviceLUIDValid: Default::default(),
191        }
192    }
193}
194
195/// See [`vkGetPhysicalDeviceExternalBufferPropertiesKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPhysicalDeviceExternalBufferPropertiesKHR)
196pub type PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR = Option<unsafe extern "system" fn(physicalDevice: vk::VkPhysicalDevice, pExternalBufferInfo: *const VkPhysicalDeviceExternalBufferInfoKHR, pExternalBufferProperties: *mut VkExternalBufferPropertiesKHR)>;
197
198#[cfg(feature = "function_prototypes")]
199extern "system" {
200    /// See [`vkGetPhysicalDeviceExternalBufferPropertiesKHR`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPhysicalDeviceExternalBufferPropertiesKHR)
201    pub fn vkGetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice: vk::VkPhysicalDevice, pExternalBufferInfo: *const VkPhysicalDeviceExternalBufferInfoKHR, pExternalBufferProperties: *mut VkExternalBufferPropertiesKHR);
202}