Remove support for DMA-BUF flags

They are never used in practice, which makes all of our flag
handling effectively dead code. Also, APIs such as KMS don't
provide a good way to deal with the flags. Let's just fail the
DMA-BUF import when clients provide flags.
This commit is contained in:
Simon Ser 2021-11-16 22:51:06 +01:00 committed by Simon Zeni
parent 9a4e1095ca
commit a04cfca4da
15 changed files with 12 additions and 83 deletions

View file

@ -77,7 +77,7 @@ static void frame_output_handle_commit(struct wl_listener *listener,
uint32_t mod_high = attribs.modifier >> 32;
uint32_t mod_low = attribs.modifier & 0xFFFFFFFF;
zwlr_export_dmabuf_frame_v1_send_frame(frame->resource,
attribs.width, attribs.height, 0, 0, attribs.flags, frame_flags,
attribs.width, attribs.height, 0, 0, 0, frame_flags,
attribs.format, mod_high, mod_low, attribs.n_planes);
for (int i = 0; i < attribs.n_planes; ++i) {

View file

@ -215,10 +215,14 @@ static void params_create_common(struct wl_resource *params_resource,
goto err_out;
}
if (flags != 0) {
wlr_log(WLR_ERROR, "dmabuf flags aren't supported");
goto err_failed;
}
attribs.width = width;
attribs.height = height;
attribs.format = format;
attribs.flags = flags;
if (width < 1 || height < 1) {
wl_resource_post_error(params_resource,

View file

@ -254,8 +254,7 @@ error_src_tex:
return false;
}
static bool frame_dma_copy(struct wlr_screencopy_frame_v1 *frame,
uint32_t *flags) {
static bool frame_dma_copy(struct wlr_screencopy_frame_v1 *frame) {
struct wlr_dmabuf_v1_buffer *dma_buffer = frame->dma_buffer;
struct wlr_output *output = frame->output;
struct wlr_renderer *renderer = wlr_backend_get_renderer(output->backend);
@ -268,11 +267,7 @@ static bool frame_dma_copy(struct wlr_screencopy_frame_v1 *frame,
return false;
}
bool ok = blit_dmabuf(renderer, dma_buffer, output->front_buffer);
*flags = dma_buffer->attributes.flags & WLR_DMABUF_ATTRIBUTES_FLAGS_Y_INVERT ?
ZWLR_SCREENCOPY_FRAME_V1_FLAGS_Y_INVERT : 0;
return ok;
return blit_dmabuf(renderer, dma_buffer, output->front_buffer);
}
static void frame_handle_output_commit(struct wl_listener *listener,
@ -282,7 +277,6 @@ static void frame_handle_output_commit(struct wl_listener *listener,
struct wlr_output_event_commit *event = data;
struct wlr_output *output = frame->output;
struct wlr_renderer *renderer = wlr_backend_get_renderer(output->backend);
uint32_t flags;
assert(renderer);
if (!(event->committed & WLR_OUTPUT_STATE_BUFFER)) {
@ -304,8 +298,9 @@ static void frame_handle_output_commit(struct wl_listener *listener,
wl_list_remove(&frame->output_commit.link);
wl_list_init(&frame->output_commit.link);
uint32_t flags = 0;
bool ok = frame->shm_buffer ?
frame_shm_copy(frame, &flags) : frame_dma_copy(frame, &flags);
frame_shm_copy(frame, &flags) : frame_dma_copy(frame);
if (!ok) {
zwlr_screencopy_frame_v1_send_failed(frame->resource);
frame_destroy(frame);