#![allow(unused_imports)]
use crate::{vk::Result as VkResult, vk::*, *};
use core::ffi::{CStr, c_char, c_int, c_void};
use core::mem::transmute;
use core::ptr;
pub const EXTENSION_NAME: &CStr = c"VK_EXT_host_image_copy";
pub(super) mod defs {
#![allow(non_camel_case_types, unused_imports)]
use crate::{vk::*, *};
use core::ffi::{CStr, c_char, c_int, c_void};
use core::fmt;
use core::marker::PhantomData;
use core::ptr;
pub type PhysicalDeviceHostImageCopyFeaturesEXT<'a> = PhysicalDeviceHostImageCopyFeatures<'a>;
pub type PhysicalDeviceHostImageCopyPropertiesEXT<'a> =
PhysicalDeviceHostImageCopyProperties<'a>;
pub type MemoryToImageCopyEXT<'a> = MemoryToImageCopy<'a>;
pub type ImageToMemoryCopyEXT<'a> = ImageToMemoryCopy<'a>;
pub type CopyMemoryToImageInfoEXT<'a> = CopyMemoryToImageInfo<'a>;
pub type CopyImageToMemoryInfoEXT<'a> = CopyImageToMemoryInfo<'a>;
pub type CopyImageToImageInfoEXT<'a> = CopyImageToImageInfo<'a>;
pub type HostImageLayoutTransitionInfoEXT<'a> = HostImageLayoutTransitionInfo<'a>;
pub type SubresourceHostMemcpySizeEXT<'a> = SubresourceHostMemcpySize<'a>;
pub type HostImageCopyDevicePerformanceQueryEXT<'a> = HostImageCopyDevicePerformanceQuery<'a>;
pub type ImageSubresource2EXT<'a> = ImageSubresource2<'a>;
pub type SubresourceLayout2EXT<'a> = SubresourceLayout2<'a>;
pub type HostImageCopyFlagsEXT = HostImageCopyFlags;
pub type PFN_vkCopyMemoryToImageEXT = PFN_vkCopyMemoryToImage;
pub type PFN_vkCopyImageToMemoryEXT = PFN_vkCopyImageToMemory;
pub type PFN_vkCopyImageToImageEXT = PFN_vkCopyImageToImage;
pub type PFN_vkTransitionImageLayoutEXT = PFN_vkTransitionImageLayout;
pub type PFN_vkGetImageSubresourceLayout2EXT = PFN_vkGetImageSubresourceLayout2;
}
#[cfg(feature = "ffi")]
pub(super) mod ffi {
#![allow(non_camel_case_types)]
use super::defs::*;
pub type VkPhysicalDeviceHostImageCopyFeaturesEXT =
PhysicalDeviceHostImageCopyFeaturesEXT<'static>;
pub type VkPhysicalDeviceHostImageCopyPropertiesEXT =
PhysicalDeviceHostImageCopyPropertiesEXT<'static>;
pub type VkMemoryToImageCopyEXT = MemoryToImageCopyEXT<'static>;
pub type VkImageToMemoryCopyEXT = ImageToMemoryCopyEXT<'static>;
pub type VkCopyMemoryToImageInfoEXT = CopyMemoryToImageInfoEXT<'static>;
pub type VkCopyImageToMemoryInfoEXT = CopyImageToMemoryInfoEXT<'static>;
pub type VkCopyImageToImageInfoEXT = CopyImageToImageInfoEXT<'static>;
pub type VkHostImageLayoutTransitionInfoEXT = HostImageLayoutTransitionInfoEXT<'static>;
pub type VkSubresourceHostMemcpySizeEXT = SubresourceHostMemcpySizeEXT<'static>;
pub type VkHostImageCopyDevicePerformanceQueryEXT =
HostImageCopyDevicePerformanceQueryEXT<'static>;
pub type VkImageSubresource2EXT = ImageSubresource2EXT<'static>;
pub type VkSubresourceLayout2EXT = SubresourceLayout2EXT<'static>;
pub type VkHostImageCopyFlagsEXT = HostImageCopyFlagsEXT;
}
pub struct DeviceFn {
copy_memory_to_image: PFN_vkCopyMemoryToImage,
copy_image_to_memory: PFN_vkCopyImageToMemory,
copy_image_to_image: PFN_vkCopyImageToImage,
transition_image_layout: PFN_vkTransitionImageLayout,
get_image_subresource_layout2: PFN_vkGetImageSubresourceLayout2,
}
impl LoadDeviceFn for DeviceFn {
unsafe fn load_with(
load: impl Fn(&CStr) -> Option<PFN_vkVoidFunction>,
) -> core::result::Result<Self, MissingEntryPointError> {
unsafe {
Ok(Self {
copy_memory_to_image: transmute(
load(c"vkCopyMemoryToImageEXT").ok_or(MissingEntryPointError)?,
),
copy_image_to_memory: transmute(
load(c"vkCopyImageToMemoryEXT").ok_or(MissingEntryPointError)?,
),
copy_image_to_image: transmute(
load(c"vkCopyImageToImageEXT").ok_or(MissingEntryPointError)?,
),
transition_image_layout: transmute(
load(c"vkTransitionImageLayoutEXT").ok_or(MissingEntryPointError)?,
),
get_image_subresource_layout2: transmute(
load(c"vkGetImageSubresourceLayout2EXT").ok_or(MissingEntryPointError)?,
),
})
}
}
}
impl DeviceFn {
#[inline]
pub unsafe fn copy_memory_to_image(
&self,
device: Device,
copy_memory_to_image_info: &CopyMemoryToImageInfo<'_>,
) -> crate::Result<()> {
unsafe {
let result = (self.copy_memory_to_image)(device, copy_memory_to_image_info);
match result {
VkResult::SUCCESS => Ok(()),
err => Err(err),
}
}
}
#[inline]
pub unsafe fn copy_image_to_memory(
&self,
device: Device,
copy_image_to_memory_info: &CopyImageToMemoryInfo<'_>,
) -> crate::Result<()> {
unsafe {
let result = (self.copy_image_to_memory)(device, copy_image_to_memory_info);
match result {
VkResult::SUCCESS => Ok(()),
err => Err(err),
}
}
}
#[inline]
pub unsafe fn copy_image_to_image(
&self,
device: Device,
copy_image_to_image_info: &CopyImageToImageInfo<'_>,
) -> crate::Result<()> {
unsafe {
let result = (self.copy_image_to_image)(device, copy_image_to_image_info);
match result {
VkResult::SUCCESS => Ok(()),
err => Err(err),
}
}
}
#[inline]
pub unsafe fn transition_image_layout(
&self,
device: Device,
transitions: &[HostImageLayoutTransitionInfo<'_>],
) -> crate::Result<()> {
unsafe {
let result = (self.transition_image_layout)(
device,
transitions.len().try_into().unwrap(),
transitions.as_ptr() as _,
);
match result {
VkResult::SUCCESS => Ok(()),
err => Err(err),
}
}
}
#[inline]
pub unsafe fn get_image_subresource_layout2(
&self,
device: Device,
image: Image,
subresource: &ImageSubresource2<'_>,
layout: &mut SubresourceLayout2<'_>,
) {
unsafe { (self.get_image_subresource_layout2)(device, image, subresource, layout) }
}
}