From 169bb00bbd2b82db51fa0ed04d01372a71f211a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Molinari?= Date: Fri, 11 Oct 2024 12:33:03 +0200 Subject: [PATCH] gl-renderer: Add color transforms feature flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace gl_supports_color_transforms with a feature flag. Signed-off-by: Loïc Molinari --- libweston/renderer-gl/gl-renderer-internal.h | 6 ++++-- libweston/renderer-gl/gl-renderer.c | 15 +++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/libweston/renderer-gl/gl-renderer-internal.h b/libweston/renderer-gl/gl-renderer-internal.h index 54846732e..8b30ca400 100644 --- a/libweston/renderer-gl/gl-renderer-internal.h +++ b/libweston/renderer-gl/gl-renderer-internal.h @@ -140,6 +140,10 @@ enum gl_feature_flag { * unmap_buffer() to unmap once read. A fence sync can be used to signal * pixel transfer completion, this is flagged as another feature. */ FEATURE_ASYNC_READBACK = 1ull << 3, + + /* GL renderer can create 16-bit floating-point framebuffers and + * transform colours using linearly interpolated 3D look-up tables. */ + FEATURE_COLOR_TRANSFORMS = 1ull << 4, }; /* Keep the following in sync with vertex.glsl. */ @@ -384,8 +388,6 @@ struct gl_renderer { GLenum pbo_usage; - bool gl_supports_color_transforms; - struct wl_list dmabuf_images; struct wl_list dmabuf_formats; struct wl_list pending_capture_list; diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c index 8b7239397..d741c7cac 100644 --- a/libweston/renderer-gl/gl-renderer.c +++ b/libweston/renderer-gl/gl-renderer.c @@ -4142,7 +4142,7 @@ gl_renderer_output_create(struct weston_output *output, if ((output->color_outcome->from_blend_to_output != NULL && output->from_blend_to_output_by_backend == false) || quirks->gl_force_full_redraw_of_shadow_fb) { - assert(gr->gl_supports_color_transforms); + assert(gl_features_has(gr, FEATURE_COLOR_TRANSFORMS)); go->shadow_format = pixel_format_get_info(DRM_FORMAT_ABGR16161616F); @@ -4639,6 +4639,8 @@ gl_renderer_display_create(struct weston_compositor *ec, ec->capabilities |= WESTON_CAP_VIEW_CLIP_MASK; if (gl_features_has(gr, FEATURE_EXPLICIT_SYNC)) ec->capabilities |= WESTON_CAP_EXPLICIT_SYNC; + if (gl_features_has(gr, FEATURE_COLOR_TRANSFORMS)) + ec->capabilities |= WESTON_CAP_COLOR_OPS; if (gr->allocator) gr->base.dmabuf_alloc = gl_renderer_dmabuf_alloc; @@ -4693,7 +4695,7 @@ gl_renderer_display_create(struct weston_compositor *ec, wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_ABGR2101010); wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_XBGR2101010); } - if (gr->gl_supports_color_transforms) { + if (gl_features_has(gr, FEATURE_COLOR_TRANSFORMS)) { wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_ABGR16161616F); wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_XBGR16161616F); } @@ -4702,10 +4704,6 @@ gl_renderer_display_create(struct weston_compositor *ec, wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_XBGR16161616); } #endif - - if (gr->gl_supports_color_transforms) - ec->capabilities |= WESTON_CAP_COLOR_OPS; - return 0; fail_with_error: @@ -4906,6 +4904,7 @@ gl_renderer_setup(struct weston_compositor *ec) wl_list_init(&gr->pending_capture_list); + /* Color transforms feature. */ if ((gr->gl_version >= gl_version(3, 2) && egl_display_has(gr, EXTENSION_KHR_GET_ALL_PROC_ADDRESSES) && gl_extensions_has(gr, EXTENSION_OES_TEXTURE_FLOAT_LINEAR)) || @@ -4913,8 +4912,8 @@ gl_renderer_setup(struct weston_compositor *ec) egl_display_has(gr, EXTENSION_KHR_GET_ALL_PROC_ADDRESSES) && gl_extensions_has(gr, EXTENSION_OES_TEXTURE_FLOAT_LINEAR) && gl_extensions_has(gr, EXTENSION_EXT_COLOR_BUFFER_HALF_FLOAT))) { - gr->gl_supports_color_transforms = true; GET_PROC_ADDRESS(gr->tex_image_3d, "glTexImage3D"); + gr->features |= FEATURE_COLOR_TRANSFORMS; } if (gl_extensions_has(gr, EXTENSION_EXT_DISJOINT_TIMER_QUERY)) { @@ -4971,7 +4970,7 @@ gl_renderer_setup(struct weston_compositor *ec) weston_log_continue(STAMP_SPACE "wl_shm 16 bpc formats: %s\n", yesno(gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16))); weston_log_continue(STAMP_SPACE "wl_shm half-float formats: %s\n", - yesno(gr->gl_supports_color_transforms)); + yesno(gl_features_has(gr, FEATURE_COLOR_TRANSFORMS))); weston_log_continue(STAMP_SPACE "internal R and RG formats: %s\n", yesno(gr->gl_version >= gl_version(3, 0) || gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_RG)));