From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- third_party/rust/ash/src/vk/prelude.rs | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 third_party/rust/ash/src/vk/prelude.rs (limited to 'third_party/rust/ash/src/vk/prelude.rs') diff --git a/third_party/rust/ash/src/vk/prelude.rs b/third_party/rust/ash/src/vk/prelude.rs new file mode 100644 index 0000000000..cb2f17718c --- /dev/null +++ b/third_party/rust/ash/src/vk/prelude.rs @@ -0,0 +1,61 @@ +use crate::vk; + +/// Holds 24 bits in the least significant bits of memory, +/// and 8 bytes in the most significant bits of that memory, +/// occupying a single [`u32`] in total. This is commonly used in +/// [acceleration structure instances] such as +/// [`vk::AccelerationStructureInstanceKHR`], +/// [`vk::AccelerationStructureSRTMotionInstanceNV`] and +/// [`vk::AccelerationStructureMatrixMotionInstanceNV`]. +/// +/// [acceleration structure instances]: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureInstanceKHR.html#_description +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] +#[repr(transparent)] +pub struct Packed24_8(u32); + +impl Packed24_8 { + pub fn new(low_24: u32, high_8: u8) -> Self { + Self((low_24 & 0x00ff_ffff) | (u32::from(high_8) << 24)) + } + + /// Extracts the least-significant 24 bits (3 bytes) of this integer + pub fn low_24(&self) -> u32 { + self.0 & 0xffffff + } + + /// Extracts the most significant 8 bits (single byte) of this integer + pub fn high_8(&self) -> u8 { + (self.0 >> 24) as u8 + } +} + +impl vk::ColorComponentFlags { + /// Contraction of [`R`][Self::R] | [`G`][Self::G] | [`B`][Self::B] | [`A`][Self::A] + pub const RGBA: Self = Self(Self::R.0 | Self::G.0 | Self::B.0 | Self::A.0); +} + +impl From for vk::Extent3D { + fn from(value: vk::Extent2D) -> Self { + Self { + width: value.width, + height: value.height, + depth: 1, + } + } +} + +impl From for vk::Rect2D { + fn from(extent: vk::Extent2D) -> Self { + Self { + offset: Default::default(), + extent, + } + } +} + +/// Structures implementing this trait are layout-compatible with [`vk::BaseInStructure`] and +/// [`vk::BaseOutStructure`]. Such structures have an `s_type` field indicating its type, which +/// must always match the value of [`TaggedStructure::STRUCTURE_TYPE`]. +pub unsafe trait TaggedStructure { + const STRUCTURE_TYPE: vk::StructureType; +} -- cgit v1.2.3