librashader/librashader-runtime-vk/src/util.rs

30 lines
996 B
Rust
Raw Normal View History

2022-12-07 18:05:10 +11:00
use ash::vk;
use librashader_reflect::reflect::semantics::BindingStage;
pub fn binding_stage_to_vulkan_stage(stage_mask: BindingStage) -> vk::ShaderStageFlags {
let mut mask = vk::ShaderStageFlags::default();
if stage_mask.contains(BindingStage::VERTEX) {
mask |= vk::ShaderStageFlags::VERTEX;
}
if stage_mask.contains(BindingStage::FRAGMENT) {
mask |= vk::ShaderStageFlags::FRAGMENT;
}
mask
}
pub fn find_vulkan_memory_type(props: &vk::PhysicalDeviceMemoryProperties, device_reqs: u32, host_reqs: vk::MemoryPropertyFlags) -> u32 {
for i in 0..vk::MAX_MEMORY_TYPES {
if device_reqs & (1 << i) != 0
&& props.memory_types[i].property_flags & host_reqs == host_reqs {
return i as u32
}
}
if host_reqs == vk::MemoryPropertyFlags::empty() {
panic!("[vk] Failed to find valid memory type.")
} else {
find_vulkan_memory_type(props, device_reqs, vk::MemoryPropertyFlags::empty())
}
}