clients/simple-dmabuf-intel: request no-roundtrip dmabuf import

request immediate dmabuf import when run with "immed" arg.

Signed-off-by: Varad Gautam <varad.gautam@collabora.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
dev
Varad Gautam 8 years ago committed by Daniel Stone
parent 65c94b8804
commit 48be0be7a3
  1. 36
      clients/simple-dmabuf-intel.c

@ -57,6 +57,7 @@ struct display {
struct zwp_fullscreen_shell_v1 *fshell; struct zwp_fullscreen_shell_v1 *fshell;
struct zwp_linux_dmabuf_v1 *dmabuf; struct zwp_linux_dmabuf_v1 *dmabuf;
int xrgb8888_format_found; int xrgb8888_format_found;
int req_dmabuf_immediate;
}; };
struct buffer { struct buffer {
@ -282,7 +283,16 @@ create_dmabuf_buffer(struct display *display, struct buffer *buffer,
modifier >> 32, modifier >> 32,
modifier & 0xffffffff); modifier & 0xffffffff);
zwp_linux_buffer_params_v1_add_listener(params, &params_listener, buffer); zwp_linux_buffer_params_v1_add_listener(params, &params_listener, buffer);
zwp_linux_buffer_params_v1_create(params, if (display->req_dmabuf_immediate) {
buffer->buffer = zwp_linux_buffer_params_v1_create_immed(params,
buffer->width,
buffer->height,
DRM_FORMAT_XRGB8888,
flags);
wl_buffer_add_listener(buffer->buffer, &buffer_listener, buffer);
}
else
zwp_linux_buffer_params_v1_create(params,
buffer->width, buffer->width,
buffer->height, buffer->height,
DRM_FORMAT_XRGB8888, DRM_FORMAT_XRGB8888,
@ -506,7 +516,8 @@ registry_handle_global(void *data, struct wl_registry *registry,
id, &zwp_fullscreen_shell_v1_interface, 1); id, &zwp_fullscreen_shell_v1_interface, 1);
} else if (strcmp(interface, "zwp_linux_dmabuf_v1") == 0) { } else if (strcmp(interface, "zwp_linux_dmabuf_v1") == 0) {
d->dmabuf = wl_registry_bind(registry, d->dmabuf = wl_registry_bind(registry,
id, &zwp_linux_dmabuf_v1_interface, 1); id, &zwp_linux_dmabuf_v1_interface,
d->req_dmabuf_immediate ? 2 : 1);
zwp_linux_dmabuf_v1_add_listener(d->dmabuf, &dmabuf_listener, d); zwp_linux_dmabuf_v1_add_listener(d->dmabuf, &dmabuf_listener, d);
} }
} }
@ -523,7 +534,7 @@ static const struct wl_registry_listener registry_listener = {
}; };
static struct display * static struct display *
create_display(void) create_display(int is_immediate)
{ {
struct display *display; struct display *display;
@ -537,6 +548,7 @@ create_display(void)
/* XXX: fake, because the compositor does not yet advertise anything */ /* XXX: fake, because the compositor does not yet advertise anything */
display->xrgb8888_format_found = 1; display->xrgb8888_format_found = 1;
display->req_dmabuf_immediate = is_immediate;
display->registry = wl_display_get_registry(display->display); display->registry = wl_display_get_registry(display->display);
wl_registry_add_listener(display->registry, wl_registry_add_listener(display->registry,
@ -590,9 +602,22 @@ main(int argc, char **argv)
struct sigaction sigint; struct sigaction sigint;
struct display *display; struct display *display;
struct window *window; struct window *window;
int is_immediate = 0;
int ret = 0; int ret = 0;
display = create_display(); if (argc > 1) {
if (!strcmp(argv[1], "immed")) {
is_immediate = 1;
}
else {
fprintf(stderr, "usage:\n\tsimple-dmabuf-intel [options]\n"
"available options:\n\timmed: avoid dmabuf "
"creation roundtrip and import immediately\n");
return 1;
}
}
display = create_display(is_immediate);
window = create_window(display, 250, 250); window = create_window(display, 250, 250);
if (!window) if (!window)
return 1; return 1;
@ -602,7 +627,8 @@ main(int argc, char **argv)
sigint.sa_flags = SA_RESETHAND; sigint.sa_flags = SA_RESETHAND;
sigaction(SIGINT, &sigint, NULL); sigaction(SIGINT, &sigint, NULL);
/* Here we retrieve the linux-dmabuf objects, or error */ /* Here we retrieve the linux-dmabuf objects if executed without immed,
* or error */
wl_display_roundtrip(display->display); wl_display_roundtrip(display->display);
if (!running) if (!running)

Loading…
Cancel
Save