alex/beta-minecraft-rust
Minecraft Beta 1.7.3 Rewrite
BRANCH main
SNAPSHOT Draw terrain GPU-driven from packed per-section buffers with GPU occlusion culling, add a render distance slider (2-128) with a quad/disk shape, cut chunk bookkeeping at high render distances, and fix a light underflow at y=0
DOWNLOAD
root crates volcanic-mem src device.rs
use crate::error::{Error, Result};
use volcanic::loader::CmdsDevice;
use volcanic::*;
macro_rules! commands {
($($field:ident: $pfn:ident = $name:ident,)*) => {
/// The device commands the allocator calls, resolved once so hot paths skip `Option` checks.
#[derive(Clone, Copy)]
pub(crate) struct DeviceFns {
$(pub $field: $pfn,)*
}
impl DeviceFns {
pub fn load(cmds: &CmdsDevice) -> Result<Self> {
Ok(Self {
$($field: cmds.$name.ok_or(Error::MissingCommand(stringify!($name)))?,)*
})
}
}
};
}
commands! {
allocate_memory: PFN_vkAllocateMemory = vkAllocateMemory,
free_memory: PFN_vkFreeMemory = vkFreeMemory,
map_memory: PFN_vkMapMemory = vkMapMemory,
flush_mapped_memory_ranges: PFN_vkFlushMappedMemoryRanges = vkFlushMappedMemoryRanges,
invalidate_mapped_memory_ranges: PFN_vkInvalidateMappedMemoryRanges = vkInvalidateMappedMemoryRanges,
create_buffer: PFN_vkCreateBuffer = vkCreateBuffer,
destroy_buffer: PFN_vkDestroyBuffer = vkDestroyBuffer,
bind_buffer_memory: PFN_vkBindBufferMemory = vkBindBufferMemory,
get_buffer_memory_requirements2: PFN_vkGetBufferMemoryRequirements2 = vkGetBufferMemoryRequirements2,
get_buffer_device_address: PFN_vkGetBufferDeviceAddress = vkGetBufferDeviceAddress,
create_image: PFN_vkCreateImage = vkCreateImage,
destroy_image: PFN_vkDestroyImage = vkDestroyImage,
bind_image_memory: PFN_vkBindImageMemory = vkBindImageMemory,
get_image_memory_requirements2: PFN_vkGetImageMemoryRequirements2 = vkGetImageMemoryRequirements2,
}