new/yocto/meta-rockchip/recipes-graphics/wayland/weston_10.0.2/0019-gl-renderer-Support-NV16-shmem-format.patch
2025-05-10 21:58:58 +08:00

75 lines
2.4 KiB
Diff

From 649de6ed31f7d2450e0917b1928667063ffc188a Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Fri, 22 Nov 2019 12:06:35 +0800
Subject: [PATCH 19/79] gl-renderer: Support NV16 shmem format
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
libweston/renderer-gl/gl-renderer.c | 36 +++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c
index f853149..3c60f85 100644
--- a/libweston/renderer-gl/gl-renderer.c
+++ b/libweston/renderer-gl/gl-renderer.c
@@ -2154,6 +2154,25 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer,
}
es->is_opaque = true;
break;
+ case WL_SHM_FORMAT_NV16:
+ pitch = wl_shm_buffer_get_stride(shm_buffer);
+ gl_pixel_type = GL_UNSIGNED_BYTE;
+ num_planes = 2;
+ gs->offset[1] = gs->offset[0] + (pitch / gs->hsub[0]) *
+ (buffer->height / gs->vsub[0]);
+ gs->hsub[1] = 2;
+ gs->vsub[1] = 1;
+ if (gr->has_gl_texture_rg) {
+ gs->shader_variant = SHADER_VARIANT_Y_UV;
+ gl_format[0] = GL_R8_EXT;
+ gl_format[1] = GL_RG8_EXT;
+ } else {
+ gs->shader_variant = SHADER_VARIANT_Y_XUXV;
+ gl_format[0] = GL_LUMINANCE;
+ gl_format[1] = GL_LUMINANCE_ALPHA;
+ }
+ es->is_opaque = true;
+ break;
case WL_SHM_FORMAT_YUYV:
gs->shader_variant = SHADER_VARIANT_Y_XUXV;
pitch = wl_shm_buffer_get_stride(shm_buffer) / 2;
@@ -2449,6 +2468,22 @@ struct yuv_format_descriptor yuv_formats[] = {
.format = DRM_FORMAT_GR88,
.plane_index = 1
}}
+ }, {
+ .format = DRM_FORMAT_NV16,
+ .input_planes = 2,
+ .output_planes = 2,
+ .texture_type = EGL_TEXTURE_Y_UV_WL,
+ {{
+ .width_divisor = 1,
+ .height_divisor = 1,
+ .format = DRM_FORMAT_R8,
+ .plane_index = 0
+ }, {
+ .width_divisor = 2,
+ .height_divisor = 1,
+ .format = DRM_FORMAT_GR88,
+ .plane_index = 1
+ }}
}, {
.format = DRM_FORMAT_YUV420,
.input_planes = 3,
@@ -3852,6 +3887,7 @@ gl_renderer_display_create(struct weston_compositor *ec,
wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_RGB565);
wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_YUV420);
wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_NV12);
+ wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_NV16);
wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_YUYV);
wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_XYUV8888);
#if __BYTE_ORDER == __LITTLE_ENDIAN
--
2.20.1