1From 649de6ed31f7d2450e0917b1928667063ffc188a Mon Sep 17 00:00:00 2001 2From: Jeffy Chen <jeffy.chen@rock-chips.com> 3Date: Fri, 22 Nov 2019 12:06:35 +0800 4Subject: [PATCH 19/79] gl-renderer: Support NV16 shmem format 5 6Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 7--- 8 libweston/renderer-gl/gl-renderer.c | 36 +++++++++++++++++++++++++++++ 9 1 file changed, 36 insertions(+) 10 11diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c 12index f853149..3c60f85 100644 13--- a/libweston/renderer-gl/gl-renderer.c 14+++ b/libweston/renderer-gl/gl-renderer.c 15@@ -2154,6 +2154,25 @@ gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer, 16 } 17 es->is_opaque = true; 18 break; 19+ case WL_SHM_FORMAT_NV16: 20+ pitch = wl_shm_buffer_get_stride(shm_buffer); 21+ gl_pixel_type = GL_UNSIGNED_BYTE; 22+ num_planes = 2; 23+ gs->offset[1] = gs->offset[0] + (pitch / gs->hsub[0]) * 24+ (buffer->height / gs->vsub[0]); 25+ gs->hsub[1] = 2; 26+ gs->vsub[1] = 1; 27+ if (gr->has_gl_texture_rg) { 28+ gs->shader_variant = SHADER_VARIANT_Y_UV; 29+ gl_format[0] = GL_R8_EXT; 30+ gl_format[1] = GL_RG8_EXT; 31+ } else { 32+ gs->shader_variant = SHADER_VARIANT_Y_XUXV; 33+ gl_format[0] = GL_LUMINANCE; 34+ gl_format[1] = GL_LUMINANCE_ALPHA; 35+ } 36+ es->is_opaque = true; 37+ break; 38 case WL_SHM_FORMAT_YUYV: 39 gs->shader_variant = SHADER_VARIANT_Y_XUXV; 40 pitch = wl_shm_buffer_get_stride(shm_buffer) / 2; 41@@ -2449,6 +2468,22 @@ struct yuv_format_descriptor yuv_formats[] = { 42 .format = DRM_FORMAT_GR88, 43 .plane_index = 1 44 }} 45+ }, { 46+ .format = DRM_FORMAT_NV16, 47+ .input_planes = 2, 48+ .output_planes = 2, 49+ .texture_type = EGL_TEXTURE_Y_UV_WL, 50+ {{ 51+ .width_divisor = 1, 52+ .height_divisor = 1, 53+ .format = DRM_FORMAT_R8, 54+ .plane_index = 0 55+ }, { 56+ .width_divisor = 2, 57+ .height_divisor = 1, 58+ .format = DRM_FORMAT_GR88, 59+ .plane_index = 1 60+ }} 61 }, { 62 .format = DRM_FORMAT_YUV420, 63 .input_planes = 3, 64@@ -3852,6 +3887,7 @@ gl_renderer_display_create(struct weston_compositor *ec, 65 wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_RGB565); 66 wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_YUV420); 67 wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_NV12); 68+ wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_NV16); 69 wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_YUYV); 70 wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_XYUV8888); 71 #if __BYTE_ORDER == __LITTLE_ENDIAN 72-- 732.20.1 74 75