DmabufTextureBuilder#
Added in version 4.14.
Superclasses: Object
GdkDmabufTextureBuilder
is a builder used to construct Texture
objects from DMA buffers.
DMA buffers are commonly called *dma-bufs*.
DMA buffers are a feature of the Linux kernel to enable efficient buffer and memory sharing between hardware such as codecs, GPUs, displays, cameras and the kernel drivers controlling them. For example, a decoder may want its output to be directly shared with the display server for rendering without a copy.
Any device driver which participates in DMA buffer sharing, can do so as either the exporter or importer of buffers (or both).
The memory that is shared via DMA buffers is usually stored in non-system memory (maybe in device’s local memory or something else not directly accessible by the CPU), and accessing this memory from the CPU may have higher-than-usual overhead.
In particular for graphics data, it is not uncommon that data consists of multiple separate blocks of memory, for example one block for each of the red, green and blue channels. These blocks are called *planes*. DMA buffers can have up to four planes. Even if the memory is a single block, the data can be organized in multiple planes, by specifying offsets from the beginning of the data.
DMA buffers are exposed to user-space as file descriptors allowing to pass them between processes. If a DMA buffer has multiple planes, there is one file descriptor per plane.
The format of the data (for graphics data, essentially its colorspace) is described
by a 32-bit integer. These format identifiers are defined in the header file drm_fourcc.h
and commonly referred to as *fourcc* values, since they are identified by 4 ASCII
characters. Additionally, each DMA buffer has a *modifier*, which is a 64-bit integer
that describes driver-specific details of the memory layout, such as tiling or compression.
For historical reasons, some producers of dma-bufs don’t provide an explicit modifier, but
instead return DMA_FORMAT_MOD_INVALID
to indicate that their modifier is *implicit*.
GTK tries to accommodate this situation by accepting DMA_FORMAT_MOD_INVALID
as modifier.
The operation of GdkDmabufTextureBuilder
is quite simple: Create a texture builder,
set all the necessary properties, and then call build
to create the new texture.
The required properties for a dma-buf texture are
The width and height in pixels
The
fourcc
code andmodifier
which identify the format and memory layout of the dma-bufThe file descriptor, offset and stride for each of the planes
GdkDmabufTextureBuilder
can be used for quick one-shot construction of
textures as well as kept around and reused to construct multiple textures.
For further information, see
The Linux kernel documentation
The header file drm_fourcc.h
Constructors#
- class DmabufTextureBuilder
- classmethod new() DmabufTextureBuilder #
Creates a new texture builder.
Added in version 4.14.
Methods#
- class DmabufTextureBuilder
- build(destroy: Callable[[None], None] | None, data: None) Texture | None #
Builds a new
GdkTexture
with the values set up in the builder.It is a programming error to call this function if any mandatory property has not been set.
Not all formats defined in the
drm_fourcc.h
header are supported. You can useget_dmabuf_formats
to get a list of supported formats. If the format is not supported by GTK,None
will be returned anderror
will be set.The
destroy
function gets called when the returned texture gets released.It is the responsibility of the caller to keep the file descriptors for the planes open until the created texture is no longer used, and close them afterwards (possibly using the
destroy
notify).It is possible to call this function multiple times to create multiple textures, possibly with changing properties in between.
Added in version 4.14.
- Parameters:
destroy – destroy function to be called when the texture is released
data – user data to pass to the destroy function
- get_color_state() ColorState | None #
Gets the color state previously set via
set_color_state()
.Added in version 4.16.
- get_display() Display #
Returns the display that this texture builder is associated with.
Added in version 4.14.
- get_fd(plane: int) int #
Gets the file descriptor for a plane.
Added in version 4.14.
- Parameters:
plane – the plane to get the fd for
- get_fourcc() int #
Gets the format previously set via
set_fourcc()
or 0 if the format wasn’t set.The format is specified as a fourcc code.
Added in version 4.14.
- get_height() int #
Gets the height previously set via
set_height()
or 0 if the height wasn’t set.Added in version 4.14.
- get_offset(plane: int) int #
Gets the offset value for a plane.
Added in version 4.14.
- Parameters:
plane – the plane to get the offset for
- get_stride(plane: int) int #
Gets the stride value for a plane.
Added in version 4.14.
- Parameters:
plane – the plane to get the stride for
- get_update_region() Region | None #
Gets the region previously set via
set_update_region()
orNone
if none was set.Added in version 4.14.
- get_update_texture() Texture | None #
Gets the texture previously set via
set_update_texture()
orNone
if none was set.Added in version 4.14.
- get_width() int #
Gets the width previously set via
set_width()
or 0 if the width wasn’t set.Added in version 4.14.
- set_color_state(color_state: ColorState | None = None) None #
Sets the color state for the texture.
By default, the colorstate is
NULL
. In that case, GTK will choose the correct colorstate based on the format. If you don’t know what colorstates are, this is probably the right thing.Added in version 4.16.
- Parameters:
color_state – a
GdkColorState
orNULL
to unset the colorstate.
- set_display(display: Display) None #
Sets the display that this texture builder is associated with.
The display is used to determine the supported dma-buf formats.
Added in version 4.14.
- Parameters:
display – the display
- set_fd(plane: int, fd: int) None #
Sets the file descriptor for a plane.
Added in version 4.14.
- Parameters:
plane – the plane to set the fd for
fd – the file descriptor
- set_fourcc(fourcc: int) None #
Sets the format of the texture.
The format is specified as a fourcc code.
The format must be set before calling
build
.Added in version 4.14.
- Parameters:
fourcc – the texture’s format or 0 to unset
- set_height(height: int) None #
Sets the height of the texture.
The height must be set before calling
build
.Added in version 4.14.
- Parameters:
height – the texture’s height or 0 to unset
- set_modifier(modifier: int) None #
Sets the modifier.
Added in version 4.14.
- Parameters:
modifier – the modifier value
- set_n_planes(n_planes: int) None #
Sets the number of planes of the texture.
Added in version 4.14.
- Parameters:
n_planes – the number of planes
- set_offset(plane: int, offset: int) None #
Sets the offset for a plane.
Added in version 4.14.
- Parameters:
plane – the plane to set the offset for
offset – the offset value
- set_premultiplied(premultiplied: bool) None #
Sets whether the data is premultiplied.
Unless otherwise specified, all formats including alpha channels are assumed to be premultiplied.
Added in version 4.14.
- Parameters:
premultiplied – whether the data is premultiplied
- set_stride(plane: int, stride: int) None #
Sets the stride for a plane.
The stride must be set for all planes before calling
build
.Added in version 4.14.
- Parameters:
plane – the plane to set the stride for
stride – the stride value
- set_update_region(region: Region | None = None) None #
Sets the region to be updated by this texture. Together with
update_texture
this describes an update of a previous texture.When rendering animations of large textures, it is possible that consecutive textures are only updating contents in parts of the texture. It is then possible to describe this update via these two properties, so that GTK can avoid rerendering parts that did not change.
An example would be a screen recording where only the mouse pointer moves.
Added in version 4.14.
- Parameters:
region – the region to update
- set_update_texture(texture: Texture | None = None) None #
Sets the texture to be updated by this texture. See
set_update_region
for an explanation.Added in version 4.14.
- Parameters:
texture – the texture to update
Properties#
- class DmabufTextureBuilder
- props.color_state: ColorState#
The type of the None singleton.
Added in version 4.16.
- props.update_region: Region#
The type of the None singleton.
Added in version 4.14.