Try to be more explicit about what you're getting with each option.
fn allocate_memory(&self, desc: &VulkanMemoryDesc) -> VulkanMemory {
let memory_property_flags = match desc.memory_location {
- MemoryLocation::Auto => vk::MemoryPropertyFlags::default(),
- MemoryLocation::PreferHost => vk::MemoryPropertyFlags::HOST_VISIBLE,
- MemoryLocation::PreferDevice => vk::MemoryPropertyFlags::DEVICE_LOCAL,
+ MemoryLocation::HostMapped => vk::MemoryPropertyFlags::HOST_VISIBLE,
+ MemoryLocation::Device => vk::MemoryPropertyFlags::DEVICE_LOCAL,
};
let memory_type_index =
.device_fn
.create_buffer(self.device, &create_info, None, &mut buffer));
- let memory = self.allocate_memory_for_buffer(buffer, desc.memory_location);
+ let memory = self.allocate_memory_for_buffer(buffer, desc.location);
unsafe {
self.device_fn.bind_buffer_memory2(
.device_fn
.create_image(self.device, &create_info, None, &mut image));
- let memory = self.allocate_memory_for_image(image, desc.memory_location);
+ let memory = self.allocate_memory_for_image(image, desc.location);
unsafe {
self.device_fn.bind_image_memory2(
#[derive(Clone, Copy, Debug)]
pub enum MemoryLocation {
- Auto,
- PreferHost,
- PreferDevice,
+ HostMapped,
+ Device,
}
#[repr(C)]
}
pub struct BufferDesc {
- pub memory_location: MemoryLocation,
+ pub location: MemoryLocation,
pub usage: BufferUsageFlags,
pub size: usize,
}
pub struct ImageDesc {
- pub memory_location: MemoryLocation,
+ pub location: MemoryLocation,
pub usage: ImageUsageFlags,
pub dimension: ImageDimension,
pub format: ImageFormat,
{
let len = data.len() * std::mem::size_of::<T>();
let buffer = device.create_buffer(&BufferDesc {
- memory_location: MemoryLocation::PreferHost,
+ location: MemoryLocation::HostMapped,
usage,
size: len,
});
let buffer = create_buffer_with_data(device, BufferUsageFlags::TRANSFER_SRC, data);
let image = device.create_image(&ImageDesc {
- memory_location: MemoryLocation::PreferDevice,
+ location: MemoryLocation::Device,
usage: ImageUsageFlags::SAMPLED | ImageUsageFlags::TRANSFER_DST,
dimension: ImageDimension::Type2d,
format: ImageFormat::RGBA8_SRGB,
impl<'a> MappedBuffer<'a> {
pub fn new(device: &'a dyn Device, usage: BufferUsageFlags, len: usize) -> Self {
let buffer = device.create_buffer(&BufferDesc {
- memory_location: MemoryLocation::PreferHost,
+ location: MemoryLocation::HostMapped,
usage,
size: len,
});
if width != depth_width || height != depth_height {
device.destroy_image(&frame, depth_image);
depth_image = device.create_image(&ImageDesc {
- memory_location: MemoryLocation::PreferDevice,
+ location: MemoryLocation::HostMapped,
usage: ImageUsageFlags::DEPTH_STENCIL,
dimension: ImageDimension::Type2d,
format: ImageFormat::DEPTH_F32,