1From 363ab921c577c045cc50b2e90eeca1cfc4abcaee Mon Sep 17 00:00:00 2001 2From: Jeffy Chen <jeffy.chen@rock-chips.com> 3Date: Wed, 27 Apr 2022 22:59:32 +0800 4Subject: [PATCH 62/79] Revert "gl-renderer: require GL_EXT_unpack_subimage" 5 6This reverts commit 593d5af43a8e2c2a3371088fa7ae430d0517c82d. 7 8For old mali, e.g. utgard. 9 10Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 11--- 12 libweston/renderer-gl/gl-renderer-internal.h | 2 ++ 13 libweston/renderer-gl/gl-renderer.c | 30 ++++++++++++++++---- 14 2 files changed, 26 insertions(+), 6 deletions(-) 15 16diff --git a/libweston/renderer-gl/gl-renderer-internal.h b/libweston/renderer-gl/gl-renderer-internal.h 17index e7e1693..ebeaadb 100644 18--- a/libweston/renderer-gl/gl-renderer-internal.h 19+++ b/libweston/renderer-gl/gl-renderer-internal.h 20@@ -133,6 +133,8 @@ struct gl_renderer { 21 PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window; 22 bool has_platform_base; 23 24+ bool has_unpack_subimage; 25+ 26 PFNEGLBINDWAYLANDDISPLAYWL bind_display; 27 PFNEGLUNBINDWAYLANDDISPLAYWL unbind_display; 28 PFNEGLQUERYWAYLANDBUFFERWL query_buffer; 29diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c 30index ac79edd..c0863c1 100644 31--- a/libweston/renderer-gl/gl-renderer.c 32+++ b/libweston/renderer-gl/gl-renderer.c 33@@ -1920,8 +1920,8 @@ gl_renderer_flush_damage(struct weston_surface *surface) 34 { 35 const struct weston_testsuite_quirks *quirks = 36 &surface->compositor->test_data.test_quirks; 37- struct gl_surface_state *gs = get_surface_state(surface); 38 struct gl_renderer *gr = get_renderer(surface->compositor); 39+ struct gl_surface_state *gs = get_surface_state(surface); 40 struct weston_buffer *buffer = gs->buffer_ref.buffer; 41 struct weston_view *view; 42 bool texture_used; 43@@ -1962,6 +1962,24 @@ gl_renderer_flush_damage(struct weston_surface *surface) 44 45 glActiveTexture(GL_TEXTURE0); 46 47+ if (!gr->has_unpack_subimage) { 48+ wl_shm_buffer_begin_access(buffer->shm_buffer); 49+ for (j = 0; j < gs->num_textures; j++) { 50+ glBindTexture(GL_TEXTURE_2D, gs->textures[j]); 51+ glTexImage2D(GL_TEXTURE_2D, 0, 52+ gs->gl_format[j], 53+ gs->pitch / gs->hsub[j], 54+ buffer->height / gs->vsub[j], 55+ 0, 56+ gl_format_from_internal(gs->gl_format[j]), 57+ gs->gl_pixel_type, 58+ data + gs->offset[j]); 59+ } 60+ wl_shm_buffer_end_access(buffer->shm_buffer); 61+ 62+ goto done; 63+ } 64+ 65 if (gs->needs_full_upload || quirks->gl_force_full_upload) { 66 glPixelStorei(GL_UNPACK_SKIP_PIXELS_EXT, 0); 67 glPixelStorei(GL_UNPACK_SKIP_ROWS_EXT, 0); 68@@ -4087,11 +4105,9 @@ gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface) 69 else 70 ec->read_format = PIXMAN_a8b8g8r8; 71 72- if (gr->gl_version < gr_gl_version(3, 0) && 73- !weston_check_egl_extension(extensions, "GL_EXT_unpack_subimage")) { 74- weston_log("GL_EXT_unpack_subimage not available.\n"); 75- return -1; 76- } 77+ if (gr->gl_version >= gr_gl_version(3, 0) || 78+ weston_check_egl_extension(extensions, "GL_EXT_unpack_subimage")) 79+ gr->has_unpack_subimage = true; 80 81 if (gr->gl_version >= gr_gl_version(3, 0) || 82 weston_check_egl_extension(extensions, "GL_EXT_texture_type_2_10_10_10_REV")) 83@@ -4132,6 +4148,8 @@ gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface) 84 gr_gl_version_minor(gr->gl_version)); 85 weston_log_continue(STAMP_SPACE "read-back format: %s\n", 86 ec->read_format == PIXMAN_a8r8g8b8 ? "BGRA" : "RGBA"); 87+ weston_log_continue(STAMP_SPACE "wl_shm sub-image to texture: %s\n", 88+ gr->has_unpack_subimage ? "yes" : "no"); 89 weston_log_continue(STAMP_SPACE "EGL Wayland extension: %s\n", 90 gr->has_bind_display ? "yes" : "no"); 91 92-- 932.20.1 94 95