.TH "wayland::zwp_linux_dmabuf_feedback_v1_t" 3 "Wed May 1 2024 17:27:19" "Version 1.0.0" "Wayland++" \" -*- nroff -*- .ad l .nh .SH NAME wayland::zwp_linux_dmabuf_feedback_v1_t \- dmabuf feedback .SH SYNOPSIS .br .PP .PP \fC#include \fP .PP Inherits \fBwayland::proxy_t\fP\&. .SS "Public Types" .in +1c .ti -1c .RI "enum class \fBwrapper_type\fP { \fBstandard\fP, \fBdisplay\fP, \fBforeign\fP, \fBproxy_wrapper\fP }" .br .in -1c .SS "Public Member Functions" .in +1c .ti -1c .RI "std::function< void()> & \fBon_done\fP ()" .br .RI "all feedback has been sent " .ti -1c .RI "std::function< void(int, uint32_t)> & \fBon_format_table\fP ()" .br .RI "format and modifier table " .ti -1c .RI "std::function< void(array_t)> & \fBon_main_device\fP ()" .br .RI "preferred main device " .ti -1c .RI "std::function< void()> & \fBon_tranche_done\fP ()" .br .RI "a preference tranche has been sent " .ti -1c .RI "std::function< void(array_t)> & \fBon_tranche_target_device\fP ()" .br .RI "target device " .ti -1c .RI "std::function< void(array_t)> & \fBon_tranche_formats\fP ()" .br .RI "supported buffer format modifier " .ti -1c .RI "std::function< void(zwp_linux_dmabuf_feedback_v1_tranche_flags)> & \fBon_tranche_flags\fP ()" .br .RI "tranche flags " .ti -1c .RI "uint32_t \fBget_id\fP () const" .br .RI "Get the id of a proxy object\&. " .ti -1c .RI "std::string \fBget_class\fP () const" .br .RI "Get the interface name (class) of a proxy object\&. " .ti -1c .RI "uint32_t \fBget_version\fP () const" .br .RI "Get the protocol object version of a proxy object\&. " .ti -1c .RI "\fBwrapper_type\fP \fBget_wrapper_type\fP () const" .br .RI "Get the type of a proxy object\&. " .ti -1c .RI "void \fBset_queue\fP (\fBevent_queue_t\fP queue)" .br .RI "Assign a proxy to an event queue\&. " .ti -1c .RI "wl_proxy * \fBc_ptr\fP () const" .br .RI "Get a pointer to the underlying C struct\&. " .ti -1c .RI "bool \fBproxy_has_object\fP () const" .br .RI "Check whether this wrapper actually wraps an object\&. " .ti -1c .RI "\fBoperator bool\fP () const" .br .RI "Check whether this wrapper actually wraps an object\&. " .ti -1c .RI "bool \fBoperator==\fP (const \fBproxy_t\fP &right) const" .br .RI "Check whether two wrappers refer to the same object\&. " .ti -1c .RI "bool \fBoperator!=\fP (const \fBproxy_t\fP &right) const" .br .RI "Check whether two wrappers refer to different objects\&. " .ti -1c .RI "void \fBproxy_release\fP ()" .br .RI "Release the wrapped object (if any), making this an empty wrapper\&. " .in -1c .SH "Detailed Description" .PP dmabuf feedback This object advertises dmabuf parameters feedback\&. This includes the preferred devices and the supported formats/modifiers\&. .PP The parameters are sent once when this object is created and whenever they change\&. The done event is always sent once after all parameters have been sent\&. When a single parameter changes, all parameters are re-sent by the compositor\&. .PP Compositors can re-send the parameters when the current client buffer allocations are sub-optimal\&. Compositors should not re-send the parameters if re-allocating the buffers would not result in a more optimal configuration\&. In particular, compositors should avoid sending the exact same parameters multiple times in a row\&. .PP The tranche_target_device and tranche_modifier events are grouped by tranches of preference\&. For each tranche, a tranche_target_device, one tranche_flags and one or more tranche_modifier events are sent, followed by a tranche_done event finishing the list\&. The tranches are sent in descending order of preference\&. All formats and modifiers in the same tranche have the same preference\&. .PP To send parameters, the compositor sends one main_device event, tranches (each consisting of one tranche_target_device event, one tranche_flags event, tranche_modifier events and then a tranche_done event), then one done event\&. .PP Definition at line \fB1938\fP of file \fBwayland\-client\-protocol\-unstable\&.hpp\fP\&. .SH "Member Enumeration Documentation" .PP .SS "enum class \fBwayland::proxy_t::wrapper_type\fP\fC [strong]\fP, \fC [inherited]\fP" Underlying wl_proxy type and properties of a \fBproxy_t\fP that affect construction, destruction, and event handling .PP \fBEnumerator\fP .in +1c .TP \fB\fIstandard \fP\fP C pointer is a standard type compatible with wl_proxy*\&. Events are dispatched and it is destructed when the \fBproxy_t\fP is destructed\&. User data is set\&. .TP \fB\fIdisplay \fP\fP C pointer is a wl_display*\&. No events are dispatched, wl_display_disconnect is called when the \fBproxy_t\fP is destructed\&. User data is set\&. .TP \fB\fIforeign \fP\fP C pointer is a standard type compatible with wl_proxy*, but another library owns it and it should not be touched in a way that could affect the operation of the other library\&. No events are dispatched, wl_proxy_destroy is not called when the \fBproxy_t\fP is destructed, user data is not touched\&. Consequently, there is no reference counting for the \fBproxy_t\fP\&. Lifetime of such wrappers should preferably be short to minimize the chance that the owning library decides to destroy the wl_proxy\&. .TP \fB\fIproxy_wrapper \fP\fP C pointer is a wl_proxy* that was constructed with wl_proxy_create_wrapper\&. No events are dispatched, wl_proxy_wrapper_destroy is called when the \fBproxy_t\fP is destroyed\&. Reference counting is active\&. A reference to the \fBproxy_t\fP creating this proxy wrapper is held to extend its lifetime until after the proxy wrapper is destroyed\&. .PP Definition at line \fB116\fP of file \fBwayland\-client\&.hpp\fP\&. .SH "Member Function Documentation" .PP .SS "wl_proxy * wayland::proxy_t::c_ptr () const\fC [inherited]\fP" .PP Get a pointer to the underlying C struct\&. .PP \fBReturns\fP .RS 4 The underlying wl_proxy wrapped by this \fBproxy_t\fP if it exists, otherwise an exception is thrown .RE .PP .SS "std::string wayland::proxy_t::get_class () const\fC [inherited]\fP" .PP Get the interface name (class) of a proxy object\&. .PP \fBReturns\fP .RS 4 The interface name of the object associated with the proxy .RE .PP .SS "uint32_t wayland::proxy_t::get_id () const\fC [inherited]\fP" .PP Get the id of a proxy object\&. .PP \fBReturns\fP .RS 4 The id the object associated with the proxy .RE .PP .SS "uint32_t wayland::proxy_t::get_version () const\fC [inherited]\fP" .PP Get the protocol object version of a proxy object\&. Gets the protocol object version of a proxy object, or 0 if the proxy was created with unversioned API\&. .PP A returned value of 0 means that no version information is available, so the caller must make safe assumptions about the object's real version\&. .PP \fBdisplay_t\fP will always return version 0\&. .PP \fBReturns\fP .RS 4 The protocol object version of the proxy or 0 .RE .PP .SS "\fBwrapper_type\fP wayland::proxy_t::get_wrapper_type () const\fC [inline]\fP, \fC [inherited]\fP" .PP Get the type of a proxy object\&. .PP Definition at line \fB302\fP of file \fBwayland\-client\&.hpp\fP\&. .SS "std::function< void()> & zwp_linux_dmabuf_feedback_v1_t::on_done ()" .PP all feedback has been sent This event is sent after all parameters of a wp_linux_dmabuf_feedback object have been sent\&. .PP This allows changes to the wp_linux_dmabuf_feedback parameters to be seen as atomic, even if they happen via multiple events\&. .PP Definition at line \fB5429\fP of file \fBwayland\-client\-protocol\-unstable\&.cpp\fP\&. .SS "std::function< void(int, uint32_t)> & zwp_linux_dmabuf_feedback_v1_t::on_format_table ()" .PP format and modifier table .PP \fBParameters\fP .RS 4 \fIfd\fP table file descriptor .br \fIsize\fP table size, in bytes .RE .PP This event provides a file descriptor which can be memory-mapped to access the format and modifier table\&. .PP The table contains a tightly packed array of consecutive format + modifier pairs\&. Each pair is 16 bytes wide\&. It contains a format as a 32-bit unsigned integer, followed by 4 bytes of unused padding, and a modifier as a 64-bit unsigned integer\&. The native endianness is used\&. .PP The client must map the file descriptor in read-only private mode\&. .PP Compositors are not allowed to mutate the table file contents once this event has been sent\&. Instead, compositors must create a new, separate table file and re-send feedback parameters\&. Compositors are allowed to store duplicate format + modifier pairs in the table\&. .PP Definition at line \fB5434\fP of file \fBwayland\-client\-protocol\-unstable\&.cpp\fP\&. .SS "std::function< void(array_t)> & zwp_linux_dmabuf_feedback_v1_t::on_main_device ()" .PP preferred main device .PP \fBParameters\fP .RS 4 \fIdevice\fP device dev_t value .RE .PP This event advertises the main device that the server prefers to use when direct scan-out to the target device isn't possible\&. The advertised main device may be different for each wp_linux_dmabuf_feedback object, and may change over time\&. .PP There is exactly one main device\&. The compositor must send at least one preference tranche with tranche_target_device equal to main_device\&. .PP Clients need to create buffers that the main device can import and read from, otherwise creating the dmabuf wl_buffer will fail (see the wp_linux_buffer_params\&.create and create_immed requests for details)\&. The main device will also likely be kept active by the compositor, so clients can use it instead of waking up another device for power savings\&. .PP In general the device is a DRM node\&. The DRM node type (primary vs\&. render) is unspecified\&. Clients must not rely on the compositor sending a particular node type\&. Clients cannot check two devices for equality by comparing the dev_t value\&. .PP If explicit modifiers are not supported and the client performs buffer allocations on a different device than the main device, then the client must force the buffer to have a linear layout\&. .PP Definition at line \fB5439\fP of file \fBwayland\-client\-protocol\-unstable\&.cpp\fP\&. .SS "std::function< void()> & zwp_linux_dmabuf_feedback_v1_t::on_tranche_done ()" .PP a preference tranche has been sent This event splits tranche_target_device and tranche_modifier events in preference tranches\&. It is sent after a set of tranche_target_device and tranche_modifier events; it represents the end of a tranche\&. The next tranche will have a lower preference\&. .PP Definition at line \fB5444\fP of file \fBwayland\-client\-protocol\-unstable\&.cpp\fP\&. .SS "std::function< void(zwp_linux_dmabuf_feedback_v1_tranche_flags)> & zwp_linux_dmabuf_feedback_v1_t::on_tranche_flags ()" .PP tranche flags .PP \fBParameters\fP .RS 4 \fIflags\fP tranche flags .RE .PP This event sets tranche-specific flags\&. .PP The scanout flag is a hint that direct scan-out may be attempted by the compositor on the target device if the client appropriately allocates a buffer\&. How to allocate a buffer that can be scanned out on the target device is implementation-defined\&. .PP This event is tied to a preference tranche, see the tranche_done event\&. .PP Definition at line \fB5459\fP of file \fBwayland\-client\-protocol\-unstable\&.cpp\fP\&. .SS "std::function< void(array_t)> & zwp_linux_dmabuf_feedback_v1_t::on_tranche_formats ()" .PP supported buffer format modifier .PP \fBParameters\fP .RS 4 \fIindices\fP array of 16-bit indexes .RE .PP This event advertises the format + modifier combinations that the compositor supports\&. .PP It carries an array of indices, each referring to a format + modifier pair in the last received format table (see the format_table event)\&. Each index is a 16-bit unsigned integer in native endianness\&. .PP For legacy support, DRM_FORMAT_MOD_INVALID is an allowed modifier\&. It indicates that the server can support the format with an implicit modifier\&. When a buffer has DRM_FORMAT_MOD_INVALID as its modifier, it is as if no explicit modifier is specified\&. The effective modifier will be derived from the dmabuf\&. .PP A compositor that sends valid modifiers and DRM_FORMAT_MOD_INVALID for a given format supports both explicit modifiers and implicit modifiers\&. .PP Compositors must not send duplicate format + modifier pairs within the same tranche or across two different tranches with the same target device and flags\&. .PP This event is tied to a preference tranche, see the tranche_done event\&. .PP For the definition of the format and modifier codes, see the wp_linux_buffer_params\&.create request\&. .PP Definition at line \fB5454\fP of file \fBwayland\-client\-protocol\-unstable\&.cpp\fP\&. .SS "std::function< void(array_t)> & zwp_linux_dmabuf_feedback_v1_t::on_tranche_target_device ()" .PP target device .PP \fBParameters\fP .RS 4 \fIdevice\fP device dev_t value .RE .PP This event advertises the target device that the server prefers to use for a buffer created given this tranche\&. The advertised target device may be different for each preference tranche, and may change over time\&. .PP There is exactly one target device per tranche\&. .PP The target device may be a scan-out device, for example if the compositor prefers to directly scan-out a buffer created given this tranche\&. The target device may be a rendering device, for example if the compositor prefers to texture from said buffer\&. .PP The client can use this hint to allocate the buffer in a way that makes it accessible from the target device, ideally directly\&. The buffer must still be accessible from the main device, either through direct import or through a potentially more expensive fallback path\&. If the buffer can't be directly imported from the main device then clients must be prepared for the compositor changing the tranche priority or making wl_buffer creation fail (see the wp_linux_buffer_params\&.create and create_immed requests for details)\&. .PP If the device is a DRM node, the DRM node type (primary vs\&. render) is unspecified\&. Clients must not rely on the compositor sending a particular node type\&. Clients cannot check two devices for equality by comparing the dev_t value\&. .PP This event is tied to a preference tranche, see the tranche_done event\&. .PP Definition at line \fB5449\fP of file \fBwayland\-client\-protocol\-unstable\&.cpp\fP\&. .SS "wayland::proxy_t::operator bool () const\fC [inherited]\fP" .PP Check whether this wrapper actually wraps an object\&. .PP \fBReturns\fP .RS 4 true if there is an underlying object, false if this wrapper is empty .RE .PP .SS "bool wayland::proxy_t::operator!= (const \fBproxy_t\fP & right) const\fC [inherited]\fP" .PP Check whether two wrappers refer to different objects\&. .SS "bool wayland::proxy_t::operator== (const \fBproxy_t\fP & right) const\fC [inherited]\fP" .PP Check whether two wrappers refer to the same object\&. .SS "bool wayland::proxy_t::proxy_has_object () const\fC [inherited]\fP" .PP Check whether this wrapper actually wraps an object\&. .PP \fBReturns\fP .RS 4 true if there is an underlying object, false if this wrapper is empty .RE .PP .SS "void wayland::proxy_t::proxy_release ()\fC [inherited]\fP" .PP Release the wrapped object (if any), making this an empty wrapper\&. Note that \fBdisplay_t\fP instances cannot be released this way\&. Attempts to do so are ignored\&. .PP \fBExamples\fP .in +1c \fBforeign_display\&.cpp\fP\&. .SS "void wayland::proxy_t::set_queue (\fBevent_queue_t\fP queue)\fC [inherited]\fP" .PP Assign a proxy to an event queue\&. .PP \fBParameters\fP .RS 4 \fIqueue\fP The event queue that will handle this proxy .RE .PP Assign proxy to event queue\&. Events coming from proxy will be queued in queue instead of the display's main queue\&. .PP See also: \fBdisplay_t::dispatch_queue()\fP\&. .PP \fBExamples\fP .in +1c \fBproxy_wrapper\&.cpp\fP\&. .SH "Author" .PP Generated automatically by Doxygen for Wayland++ from the source code\&.