linux_dmabuf_v1: Implement data_ptr_access

Allow direct access to the pixel data of linux_dmabuf_v1 buffers by
mmapping the FD.  This causes a wait on any outstanding fences and also
triggers the DMA_BUF_SYNC mechanism to do any cache fiddling needed.

This doesn't support multi-planar formats (e.g. YUV420 from hardware
codecs)

I also fix the comment on wlr_renderer.render_buffer_caps (it's used for
textures, not the render target) and update
wlr_renderer_init_wl_display() and
wlr_linux_dmabuf_feedback_v1_init_with_options() to use the renderer's
own claimed buffer_caps instead of hardcoding DMABUF as required.

Loosely based on 46ef2cfa3c
This commit is contained in:
David Turner 2024-06-06 11:16:49 +01:00
parent af43d3b9e7
commit 27bbb91abf
5 changed files with 120 additions and 4 deletions

View file

@ -26,8 +26,8 @@ struct wlr_fbox;
* A renderer for basic 2D operations.
*/
struct wlr_renderer {
// Capabilities required for the buffer used as a render target (bitmask of
// enum wlr_buffer_cap)
// Capabilities required for the buffers used as texture sources and
// render target (bitmask of enum wlr_buffer_cap)
uint32_t render_buffer_caps;
struct {

View file

@ -26,6 +26,12 @@ struct wlr_dmabuf_v1_buffer {
struct {
struct wl_listener release;
// Cache mapped address while ptr_data_access is open
void *addr;
// WLR_BUFFER_DATA_PTR_ACCESS_* flags describing the type of
// the current ptr_data_access
uint32_t access_flags;
} WLR_PRIVATE;
};