pub trait Gralloc: Send {
    // Required methods
    fn supports_external_gpu_memory(&self) -> bool;
    fn supports_dmabuf(&self) -> bool;
    fn get_image_memory_requirements(
        &mut self,
        info: ImageAllocationInfo
    ) -> RutabagaResult<ImageMemoryRequirements>;
    fn allocate_memory(
        &mut self,
        reqs: ImageMemoryRequirements
    ) -> RutabagaResult<RutabagaHandle>;

    // Provided method
    fn import_and_map(
        &mut self,
        _handle: RutabagaHandle,
        _vulkan_info: VulkanInfo,
        _size: u64
    ) -> RutabagaResult<Box<dyn MappedRegion>> { ... }
}
Expand description

Trait that needs to be implemented to service graphics memory requests. Two step allocation process:

(1) Get memory requirements for a given allocation request. (2) Allocate using those requirements.

Required Methods§

source

fn supports_external_gpu_memory(&self) -> bool

This function must return true if the implementation can:

(1) allocate GPU memory and (2) {export to}/{import from} into a OS-specific RutabagaHandle.

source

fn supports_dmabuf(&self) -> bool

This function must return true the implementation can {export to}/{import from} a Linux dma-buf. This often used for sharing with the scanout engine or multimedia subsystems.

source

fn get_image_memory_requirements( &mut self, info: ImageAllocationInfo ) -> RutabagaResult<ImageMemoryRequirements>

Implementations must return the resource layout, compression, and caching properties of an allocation request.

source

fn allocate_memory( &mut self, reqs: ImageMemoryRequirements ) -> RutabagaResult<RutabagaHandle>

Implementations must allocate memory given the requirements and return a RutabagaHandle upon success.

Provided Methods§

source

fn import_and_map( &mut self, _handle: RutabagaHandle, _vulkan_info: VulkanInfo, _size: u64 ) -> RutabagaResult<Box<dyn MappedRegion>>

Implementations must import the given handle and return a mapping, suitable for use with KVM and other hypervisors. This is optional and only works with the Vulkano backend.

Implementors§