#![allow(unsafe_code)]
#![allow(
clippy::redundant_pub_crate,
reason = "workspace `unreachable_pub` policy (Cargo.toml) wants `pub(crate)` here; \
clippy::pedantic's redundant_pub_crate disagrees for private modules — the \
two lints are mutually exclusive for this shape, workspace policy wins"
)]
use mediaway_common::{GpuBufferHandle, NativeHandle};
use vulkanalia::vk;
use vulkanalia::vk::Handle;
use crate::vulkan::session::VulkanDecodeError;
use crate::vulkan::session_command::SessionResources;
pub(crate) fn build_handle(
resources: &SessionResources,
slot_index: u32,
) -> Result<GpuBufferHandle, VulkanDecodeError> {
let image_bits = usize::try_from(resources.dpb_image.as_raw()).unwrap_or(0);
let image = NativeHandle::new(image_bits).ok_or(VulkanDecodeError::VkCall {
call: "zero_copy::build_handle (null VkImage)",
result: vk::ErrorCode::UNKNOWN,
})?;
let memory = NativeHandle::new(slot_index as usize + 1).ok_or(VulkanDecodeError::VkCall {
call: "zero_copy::build_handle (invalid slot index)",
result: vk::ErrorCode::UNKNOWN,
})?;
Ok(GpuBufferHandle::Vulkan { image, memory })
}