Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
153 changes: 153 additions & 0 deletions ash/src/extensions/ext/descriptor_heap.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
//! <https://docs.vulkan.org/refpages/latest/refpages/source/VK_EXT_descriptor_heap.html>

use crate::vk;
use crate::VkResult;

impl crate::ext::descriptor_heap::Device {
/// <https://docs.vulkan.org/refpages/latest/refpages/source/vkWriteSamplerDescriptorsEXT.html>
#[inline]
pub unsafe fn write_sampler_descriptors(
&self,
samplers: &[vk::SamplerCreateInfo<'_>],
descriptors: &[vk::HostAddressRangeEXT<'_>],
) -> VkResult<()> {
assert_eq!(samplers.len(), descriptors.len());
unsafe {
(self.fp.write_sampler_descriptors_ext)(
self.handle,
samplers.len() as u32,
samplers.as_ptr(),
descriptors.as_ptr(),
)
}
.result()
}

/// <https://docs.vulkan.org/refpages/latest/refpages/source/vkWriteResourceDescriptorsEXT.html>
#[inline]
pub unsafe fn write_resource_descriptors(
&self,
resources: &[vk::ResourceDescriptorInfoEXT<'_>],
descriptors: &[vk::HostAddressRangeEXT<'_>],
) -> VkResult<()> {
assert_eq!(resources.len(), descriptors.len());
unsafe {
(self.fp.write_resource_descriptors_ext)(
self.handle,
resources.len() as u32,
resources.as_ptr(),
descriptors.as_ptr(),
)
}
.result()
}

/// <https://docs.vulkan.org/refpages/latest/refpages/source/vkCmdBindSamplerHeapEXT.html>
#[inline]
pub unsafe fn cmd_bind_sampler_heap(
&self,
command_buffer: vk::CommandBuffer,
bind_info: &vk::BindHeapInfoEXT<'_>,
) {
unsafe { (self.fp.cmd_bind_sampler_heap_ext)(command_buffer, bind_info) }
}

/// <https://docs.vulkan.org/refpages/latest/refpages/source/vkCmdBindResourceHeapEXT.html>
#[inline]
pub unsafe fn cmd_bind_resource_heap(
&self,
command_buffer: vk::CommandBuffer,
bind_info: &vk::BindHeapInfoEXT<'_>,
) {
unsafe { (self.fp.cmd_bind_resource_heap_ext)(command_buffer, bind_info) }
}

/// <https://docs.vulkan.org/refpages/latest/refpages/source/vkCmdPushDataEXT.html>
#[inline]
pub unsafe fn cmd_push_data(
&self,
command_buffer: vk::CommandBuffer,
push_data_info: &vk::PushDataInfoEXT<'_>,
) {
unsafe { (self.fp.cmd_push_data_ext)(command_buffer, push_data_info) }
}

/// <https://docs.vulkan.org/refpages/latest/refpages/source/vkGetImageOpaqueCaptureDataEXT.html>
#[inline]
pub unsafe fn get_image_opaque_capture_data(
&self,
images: &[vk::Image],
datas: &mut [vk::HostAddressRangeEXT<'_>],
) -> VkResult<()> {
assert_eq!(images.len(), datas.len());
unsafe {
(self.fp.get_image_opaque_capture_data_ext)(
self.handle,
images.len() as u32,
images.as_ptr(),
datas.as_mut_ptr(),
)
.result()
}
}

/// <https://docs.vulkan.org/refpages/latest/refpages/source/vkRegisterCustomBorderColorEXT.html>
#[inline]
pub unsafe fn register_custom_border_color(
&self,
border_color: &vk::SamplerCustomBorderColorCreateInfoEXT<'_>,
index: Option<u32>,
) -> VkResult<u32> {
let request_index = index.is_some() as u32;
let mut index = index.unwrap_or_default();
unsafe {
(self.fp.register_custom_border_color_ext)(
self.handle,
border_color,
request_index,
&mut index,
)
.result()?;
}
Ok(index)
}

/// <https://docs.vulkan.org/refpages/latest/refpages/source/vkUnregisterCustomBorderColorEXT.html>
#[inline]
pub unsafe fn unregister_custom_border_color(&self, index: u32) {
unsafe { (self.fp.unregister_custom_border_color_ext)(self.handle, index) }
}

/// <https://docs.vulkan.org/refpages/latest/refpages/source/vkGetTensorOpaqueCaptureDataARM.html>
#[inline]
pub unsafe fn get_tensor_opaque_capture_data_arm(
&self,
tensors: &[vk::TensorARM],
datas: &mut [vk::HostAddressRangeEXT<'_>],
) -> VkResult<()> {
assert_eq!(tensors.len(), datas.len());
unsafe {
(self.fp.get_tensor_opaque_capture_data_arm)(
self.handle,
tensors.len() as u32,
tensors.as_ptr(),
datas.as_mut_ptr(),
)
.result()
}
}
}

impl crate::ext::descriptor_heap::Instance {
/// <https://docs.vulkan.org/refpages/latest/refpages/source/vkGetPhysicalDeviceDescriptorSizeEXT.html>
#[inline]
pub unsafe fn get_physical_device_descriptor_size(
&self,
physical_device: vk::PhysicalDevice,
descriptor_type: vk::DescriptorType,
) -> vk::DeviceSize {
unsafe {
(self.fp.get_physical_device_descriptor_size_ext)(physical_device, descriptor_type)
}
}
}
1 change: 1 addition & 0 deletions ash/src/extensions/ext/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ pub mod debug_marker;
pub mod debug_report;
pub mod debug_utils;
pub mod descriptor_buffer;
pub mod descriptor_heap;
pub mod extended_dynamic_state;
pub mod extended_dynamic_state2;
pub mod extended_dynamic_state3;
Expand Down