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}