This allows to check if ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT is interpreted correctly by the compositor. --- clients/simple-dmabuf-drm.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-)
diff --git a/clients/simple-dmabuf-drm.c b/clients/simple-dmabuf-drm.c index 14d716de..1073930f 100644 --- a/clients/simple-dmabuf-drm.c +++ b/clients/simple-dmabuf-drm.c @@ -379,11 +379,11 @@ static const struct zwp_linux_buffer_params_v1_listener params_listener = { static int create_dmabuf_buffer(struct display *display, struct buffer *buffer, - int width, int height, int format) + int width, int height, int format, int is_y_inverted) { struct zwp_linux_buffer_params_v1 *params; uint64_t modifier = 0; - uint32_t flags; + uint32_t flags = 0; struct drm_device *drm_dev; if (!drm_connect(buffer)) { @@ -434,7 +434,8 @@ create_dmabuf_buffer(struct display *display, struct buffer *buffer, * correct height to the compositor. */ buffer->height = height; - flags = 0; + if (is_y_inverted) + flags |= ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT; params = zwp_linux_dmabuf_v1_create_params(display->dmabuf); zwp_linux_buffer_params_v1_add(params, @@ -517,7 +518,8 @@ static const struct zxdg_toplevel_v6_listener xdg_toplevel_listener = { }; static struct window * -create_window(struct display *display, int width, int height, int format) +create_window(struct display *display, int width, int height, int format, + int is_y_inverted) { struct window *window; int i; @@ -566,7 +568,7 @@ create_window(struct display *display, int width, int height, int format) for (i = 0; i < NUM_BUFFERS; ++i) { ret = create_dmabuf_buffer(display, &window->buffers[i], - width, height, format); + width, height, format, is_y_inverted); if (ret < 0) return NULL; @@ -814,13 +816,15 @@ print_usage_and_exit(void) printf("usage flags:\n" "\t'--import-immediate=<>'\n\t\t0 to import dmabuf via roundtrip," "\n\t\t1 to enable import without roundtrip\n" + "\t'--y-inverted=<>'\n\t\t0 to not pass Y_INVERTED flag," + "\n\t\t1 to pass Y_INVERTED flag\n" "\t'--import-format=<>'\n\t\tXRGB to import dmabuf as XRGB8888," "\n\t\tNV12 to import as multi plane NV12 with tiling modifier\n"); exit(0); } static int -is_import_mode_immediate(const char* c) +is_true(const char* c) { if (!strcmp(c, "1")) return 1; @@ -852,22 +856,29 @@ main(int argc, char **argv) struct display *display; struct window *window; int is_immediate = 0; + int is_y_inverted= 0; int import_format = DRM_FORMAT_XRGB8888; int ret = 0, i = 0; if (argc > 1) { static const char import_mode[] = "--import-immediate="; static const char format[] = "--import-format="; + static const char y_inverted[] = "--y-inverted="; for (i = 1; i < argc; i++) { if (!strncmp(argv[i], import_mode, sizeof(import_mode) - 1)) { - is_immediate = is_import_mode_immediate(argv[i] + is_immediate = is_true(argv[i] + sizeof(import_mode) - 1); } else if (!strncmp(argv[i], format, sizeof(format) - 1)) { import_format = parse_import_format(argv[i] + sizeof(format) - 1); } + else if (!strncmp(argv[i], y_inverted, + sizeof(y_inverted) - 1)) { + is_y_inverted = is_true(argv[i] + + sizeof(y_inverted) - 1); + } else { print_usage_and_exit(); } @@ -875,7 +886,7 @@ main(int argc, char **argv) } display = create_display(is_immediate, import_format); - window = create_window(display, 256, 256, import_format); + window = create_window(display, 256, 256, import_format, is_y_inverted); if (!window) return 1; -- 2.16.1 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel