extensions/ext: Add VK_EXT_sample_locations (#616)

This commit is contained in:
Marijn Suijten 2022-05-10 20:28:14 +02:00 committed by GitHub
parent e76830bdef
commit a672094c97
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 0 deletions

View file

@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added ### Added
- Added `VK_EXT_sample_locations` device extension (#616)
- Update Vulkan-Headers to 1.3.211 (#605, #608) - Update Vulkan-Headers to 1.3.211 (#605, #608)
- Added `VK_EXT_image_drm_format_modifier` device extension (#603) - Added `VK_EXT_image_drm_format_modifier` device extension (#603)

View file

@ -13,6 +13,7 @@ pub use self::image_drm_format_modifier::ImageDrmFormatModifier;
pub use self::metal_surface::MetalSurface; pub use self::metal_surface::MetalSurface;
pub use self::physical_device_drm::PhysicalDeviceDrm; pub use self::physical_device_drm::PhysicalDeviceDrm;
pub use self::private_data::PrivateData; pub use self::private_data::PrivateData;
pub use self::sample_locations::SampleLocations;
pub use self::tooling_info::ToolingInfo; pub use self::tooling_info::ToolingInfo;
mod buffer_device_address; mod buffer_device_address;
@ -30,4 +31,5 @@ mod image_drm_format_modifier;
mod metal_surface; mod metal_surface;
mod physical_device_drm; mod physical_device_drm;
mod private_data; mod private_data;
mod sample_locations;
mod tooling_info; mod tooling_info;

View file

@ -0,0 +1,50 @@
use crate::vk;
use crate::{Entry, Instance};
use std::ffi::CStr;
use std::mem;
/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_sample_locations.html>
#[derive(Clone)]
pub struct SampleLocations {
fp: vk::ExtSampleLocationsFn,
}
impl SampleLocations {
pub fn new(entry: &Entry, instance: &Instance) -> Self {
let fp = vk::ExtSampleLocationsFn::load(|name| unsafe {
mem::transmute(entry.get_instance_proc_addr(instance.handle(), name.as_ptr()))
});
Self { fp }
}
/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceMultisamplePropertiesEXT.html>
pub unsafe fn get_physical_device_multisample_properties(
&self,
physical_device: vk::PhysicalDevice,
samples: vk::SampleCountFlags,
multisample_properties: &mut vk::MultisamplePropertiesEXT,
) {
(self.fp.get_physical_device_multisample_properties_ext)(
physical_device,
samples,
multisample_properties,
)
}
/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetSampleLocationsEXT.html>
pub unsafe fn cmd_set_sample_locations(
&self,
command_buffer: vk::CommandBuffer,
sample_locations_info: &vk::SampleLocationsInfoEXT,
) {
(self.fp.cmd_set_sample_locations_ext)(command_buffer, sample_locations_info)
}
pub const fn name() -> &'static CStr {
vk::ExtSampleLocationsFn::name()
}
pub fn fp(&self) -> &vk::ExtSampleLocationsFn {
&self.fp
}
}