Theme

alex/volcanic-mem

BRANCH main
main
SNAPSHOT Initial commit
DOWNLOAD
Download file

root / 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,
}