diff options
author | Simon Ser <contact@emersion.fr> | 2021-06-29 17:08:32 +0200 |
---|---|---|
committer | Simon Zeni <simon@bl4ckb0ne.ca> | 2021-09-10 13:16:10 -0400 |
commit | 4e7a8707cce75b4cdc046581ec0c1cc7c0c26e02 (patch) | |
tree | 34d086a258df5567d832e28d4622e19ec3517354 /include | |
parent | 105fdecd0cd893c4ae1e21f78c67404f70859af8 (diff) |
buffer: add data_ptr access flags
This allows callers to specify the operations they'll perform on
the returned data pointer. The motivations for this are:
- The upcoming Linux MAP_NOSIGBUS flag may only be usable on
read-only mappings.
- gbm_bo_map with GBM_BO_TRANSFER_READ hurts performance.
Diffstat (limited to 'include')
-rw-r--r-- | include/types/wlr_buffer.h | 24 | ||||
-rw-r--r-- | include/wlr/types/wlr_buffer.h | 4 |
2 files changed, 21 insertions, 7 deletions
diff --git a/include/types/wlr_buffer.h b/include/types/wlr_buffer.h index 4817e23f..6f8d3b1c 100644 --- a/include/types/wlr_buffer.h +++ b/include/types/wlr_buffer.h @@ -70,16 +70,30 @@ struct wlr_dmabuf_buffer *dmabuf_buffer_create( bool dmabuf_buffer_drop(struct wlr_dmabuf_buffer *buffer); /** + * Buffer data pointer access flags. + */ +enum wlr_buffer_data_ptr_access_flag { + /** + * The buffer contents can be read back. + */ + WLR_BUFFER_DATA_PTR_ACCESS_READ = 1 << 0, + /** + * The buffer contents can be written to. + */ + WLR_BUFFER_DATA_PTR_ACCESS_WRITE = 1 << 1, +}; + +/** * Get a pointer to a region of memory referring to the buffer's underlying * storage. The format and stride can be used to interpret the memory region * contents. * - * The returned pointer should be pointing to a valid memory region for read - * and write operations. The returned pointer is only valid up to the next - * buffer_end_data_ptr_access call. + * The returned pointer should be pointing to a valid memory region for the + * operations specified in the flags. The returned pointer is only valid up to + * the next buffer_end_data_ptr_access call. */ -bool buffer_begin_data_ptr_access(struct wlr_buffer *buffer, void **data, - uint32_t *format, size_t *stride); +bool buffer_begin_data_ptr_access(struct wlr_buffer *buffer, uint32_t flags, + void **data, uint32_t *format, size_t *stride); void buffer_end_data_ptr_access(struct wlr_buffer *buffer); #endif diff --git a/include/wlr/types/wlr_buffer.h b/include/wlr/types/wlr_buffer.h index c714ddb6..6bf3c97b 100644 --- a/include/wlr/types/wlr_buffer.h +++ b/include/wlr/types/wlr_buffer.h @@ -30,8 +30,8 @@ struct wlr_buffer_impl { struct wlr_dmabuf_attributes *attribs); bool (*get_shm)(struct wlr_buffer *buffer, struct wlr_shm_attributes *attribs); - bool (*begin_data_ptr_access)(struct wlr_buffer *buffer, void **data, - uint32_t *format, size_t *stride); + bool (*begin_data_ptr_access)(struct wlr_buffer *buffer, uint32_t flags, + void **data, uint32_t *format, size_t *stride); void (*end_data_ptr_access)(struct wlr_buffer *buffer); }; |