1 // Copyright (c) 2016 The vulkano developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or
4 // https://www.apache.org/licenses/LICENSE-2.0> or the MIT
5 // license <LICENSE-MIT or https://opensource.org/licenses/MIT>,
6 // at your option. All files in the project carrying such
7 // notice may not be copied, modified, or distributed except
8 // according to those terms.
9 
10 use crate::macros::vulkan_bitflags;
11 
12 vulkan_bitflags! {
13     #[non_exhaustive]
14 
15     /// Describes how a buffer is going to be used. This is **not** just an optimization.
16     ///
17     /// If you try to use a buffer in a way that you didn't declare, an error will be returned.
18     BufferUsage = BufferUsageFlags(u32);
19 
20     /// The buffer can be used as a source for transfer, blit, resolve and clear commands.
21     TRANSFER_SRC = TRANSFER_SRC,
22 
23     /// The buffer can be used as a destination for transfer, blit, resolve and clear commands.
24     TRANSFER_DST = TRANSFER_DST,
25 
26     /// The buffer can be used as a uniform texel buffer in a descriptor set.
27     UNIFORM_TEXEL_BUFFER = UNIFORM_TEXEL_BUFFER,
28 
29     /// The buffer can be used as a storage texel buffer in a descriptor set.
30     STORAGE_TEXEL_BUFFER = STORAGE_TEXEL_BUFFER,
31 
32     /// The buffer can be used as a uniform buffer in a descriptor set.
33     UNIFORM_BUFFER = UNIFORM_BUFFER,
34 
35     /// The buffer can be used as a storage buffer in a descriptor set.
36     STORAGE_BUFFER = STORAGE_BUFFER,
37 
38     /// The buffer can be used as an index buffer.
39     INDEX_BUFFER = INDEX_BUFFER,
40 
41     /// The buffer can be used as a vertex or instance buffer.
42     VERTEX_BUFFER = VERTEX_BUFFER,
43 
44     /// The buffer can be used as an indirect buffer.
45     INDIRECT_BUFFER = INDIRECT_BUFFER,
46 
47     /// The buffer's device address can be retrieved.
48     ///
49     /// A buffer created with this usage can only be bound to device memory allocated with the
50     /// [`MemoryAllocateFlags::DEVICE_ADDRESS`] flag, unless the [`ext_buffer_device_address`]
51     /// extension is enabled on the device.
52     ///
53     /// [`MemoryAllocateFlags::DEVICE_ADDRESS`]: crate::memory::MemoryAllocateFlags::DEVICE_ADDRESS
54     /// [`ext_buffer_device_address`]: crate::device::DeviceExtensions::ext_buffer_device_address
55     SHADER_DEVICE_ADDRESS = SHADER_DEVICE_ADDRESS {
56         api_version: V1_2,
57         device_extensions: [khr_buffer_device_address, ext_buffer_device_address],
58     },
59 
60     /* TODO: enable
61     // TODO: document
62     VIDEO_DECODE_SRC = VIDEO_DECODE_SRC_KHR {
63         device_extensions: [khr_video_decode_queue],
64     },*/
65 
66     /* TODO: enable
67     // TODO: document
68     VIDEO_DECODE_DST = VIDEO_DECODE_DST_KHR {
69         device_extensions: [khr_video_decode_queue],
70     },*/
71 
72     /* TODO: enable
73     // TODO: document
74     TRANSFORM_FEEDBACK_BUFFER = TRANSFORM_FEEDBACK_BUFFER_EXT {
75         device_extensions: [ext_transform_feedback],
76     },*/
77 
78     /* TODO: enable
79     // TODO: document
80     TRANSFORM_FEEDBACK_COUNTER_BUFFER = TRANSFORM_FEEDBACK_COUNTER_BUFFER_EXT {
81         device_extensions: [ext_transform_feedback],
82     },*/
83 
84     /* TODO: enable
85     // TODO: document
86     CONDITIONAL_RENDERING = CONDITIONAL_RENDERING_EXT {
87         device_extensions: [ext_conditional_rendering],
88     },*/
89 
90     /* TODO: enable
91     // TODO: document
92     ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_KHR = ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_KHR {
93         device_extensions: [khr_acceleration_structure],
94     },*/
95 
96     /* TODO: enable
97     // TODO: document
98     ACCELERATION_STRUCTURE_STORAGE = ACCELERATION_STRUCTURE_STORAGE_KHR {
99         device_extensions: [khr_acceleration_structure],
100     },*/
101 
102     /* TODO: enable
103     // TODO: document
104     SHADER_BINDING_TABLE = SHADER_BINDING_TABLE_KHR {
105         device_extensions: [khr_ray_tracing_pipeline, nv_ray_tracing],
106     },*/
107 
108     /* TODO: enable
109     // TODO: document
110     VIDEO_ENCODE_DST = VIDEO_ENCODE_DST_KHR {
111         device_extensions: [khr_video_encode_queue],
112     },*/
113 
114     /* TODO: enable
115     // TODO: document
116     VIDEO_ENCODE_SRC = VIDEO_ENCODE_SRC_KHR {
117         device_extensions: [khr_video_encode_queue],
118     },*/
119 
120     /* TODO: enable
121     // TODO: document
122     SAMPLER_DESCRIPTOR_BUFFER = SAMPLER_DESCRIPTOR_BUFFER_EXT {
123         device_extensions: [ext_descriptor_buffer],
124     },*/
125 
126     /* TODO: enable
127     // TODO: document
128     RESOURCE_DESCRIPTOR_BUFFER = RESOURCE_DESCRIPTOR_BUFFER_EXT {
129         device_extensions: [ext_descriptor_buffer],
130     },*/
131 
132     /* TODO: enable
133     // TODO: document
134     PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER = PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_EXT {
135         device_extensions: [ext_descriptor_buffer],
136     },*/
137 
138     /* TODO: enable
139     // TODO: document
140     MICROMAP_BUILD_INPUT_READ_ONLY = MICROMAP_BUILD_INPUT_READ_ONLY_EXT {
141         device_extensions: [ext_opacity_micromap],
142     },*/
143 
144     /* TODO: enable
145     // TODO: document
146     MICROMAP_STORAGE = MICROMAP_STORAGE_EXT {
147         device_extensions: [ext_opacity_micromap],
148     },*/
149 }
150