From d24caf5f320889b72b284ed60aa51aa666ecb5e1 Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Mon, 12 May 2025 17:24:36 +0200 Subject: [PATCH] gl-renderer: Add gl_force_import_yuv_fallback test quirk Forcing the fallback paths for YUV formats. This will allow us to test these paths on CI now that llvmpipe supports all tested formats natively. Signed-off-by: Robert Mader --- include/libweston/libweston.h | 2 ++ libweston/renderer-gl/gl-renderer.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/libweston/libweston.h b/include/libweston/libweston.h index e1110f8f2..6e469f8d5 100644 --- a/include/libweston/libweston.h +++ b/include/libweston/libweston.h @@ -205,6 +205,8 @@ struct weston_testsuite_quirks { bool gl_force_full_upload; /** Ensure GL shadow fb is used, and always repaint it fully. */ bool gl_force_full_redraw_of_shadow_fb; + /** Force GL-renderer to use the internal YUV->RGB shader */ + bool gl_force_import_yuv_fallback; /** Required enum weston_capability bit mask, otherwise skip run. */ uint32_t required_capabilities; }; diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c index 3fe26e0fa..c06e12782 100644 --- a/libweston/renderer-gl/gl-renderer.c +++ b/libweston/renderer-gl/gl-renderer.c @@ -3441,8 +3441,11 @@ import_dmabuf(struct gl_renderer *gr, { EGLImageKHR egl_image; struct gl_buffer_state *gb; + const struct pixel_format_info *info; + const struct weston_testsuite_quirks *quirks; - if (!pixel_format_get_info(dmabuf->attributes.format)) + info = pixel_format_get_info(dmabuf->attributes.format); + if (!info) return NULL; gb = zalloc(sizeof(*gb)); @@ -3453,6 +3456,11 @@ import_dmabuf(struct gl_renderer *gr, pixman_region32_init(&gb->texture_damage); wl_list_init(&gb->destroy_listener.link); + quirks = &gr->compositor->test_data.test_quirks; + if (quirks->gl_force_import_yuv_fallback && + info->color_model == COLOR_MODEL_YUV) + goto import_yuv; + egl_image = import_simple_dmabuf(gr, &dmabuf->attributes); if (egl_image != EGL_NO_IMAGE_KHR) { const GLint swizzles[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA }; @@ -3478,6 +3486,7 @@ import_dmabuf(struct gl_renderer *gr, return gb; } +import_yuv: if (!import_yuv_dmabuf(gr, gb, &dmabuf->attributes)) { destroy_buffer_state(gb); return NULL;