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