Documentation for <wlr/render/allocator.h>

Back to index

Table of contents

struct wlr_allocator

struct wlr_allocator {
	const struct wlr_allocator_interface *impl;
	
	// Capabilities of the buffers created with this allocator
	uint32_t buffer_caps;
	
	struct {
		struct wl_signal destroy;
	} events;
};

An allocator is responsible for allocating memory for pixel buffers.

Each allocator may return buffers with different capabilities (shared memory, DMA-BUF, memory mapping, etc), placement (main memory, VRAM on a GPU, etc) and properties (possible usage, access performance, etc). See struct wlr_buffer.

An allocator can be passed to a struct wlr_swapchain for multiple buffering.

wlr_allocator_autocreate()

struct wlr_allocator *wlr_allocator_autocreate(​struct wlr_backend *backend, struct wlr_renderer *renderer);

Creates the adequate struct wlr_allocator given a backend and a renderer.

wlr_allocator_create_buffer()

struct wlr_buffer *wlr_allocator_create_buffer(​struct wlr_allocator *alloc, int width, int height, const struct wlr_drm_format *format);

Allocate a new buffer.

When the caller is done with it, they must unreference it by calling wlr_buffer_drop().

The `format` passed in indicates the format to use and the list of acceptable modifiers. The order in which modifiers are listed is not significant.

When running with legacy drivers which don't support explicit modifiers, the allocator must recognize two modifiers: INVALID (for implicit tiling and/or compression) and LINEAR.

The allocator must return a buffer using one of the modifiers listed. In particular, allocators must not return a buffer with an implicit modifier unless the user has allowed it by passing INVALID in the modifier list.

wlr_allocator_destroy()

void wlr_allocator_destroy(​struct wlr_allocator *alloc);

Destroy the allocator.

wlr_allocator_init()

void wlr_allocator_init(​struct wlr_allocator *alloc, const struct wlr_allocator_interface *impl, uint32_t buffer_caps);

struct wlr_allocator_interface

struct wlr_allocator_interface {
	struct wlr_buffer *(*create_buffer)(​struct wlr_allocator *alloc, int width, int height, const struct wlr_drm_format *format);
	void (*destroy)(​struct wlr_allocator *alloc);
};