1*4882a593SmuzhiyunFrom 5b0c8a0d4e5afbb4c13945d8e1b79cc46deea278 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Wed, 27 Apr 2022 22:59:32 +0800 4*4882a593SmuzhiyunSubject: [PATCH 03/79] Revert "gl-renderer: require GL_EXT_unpack_subimage" 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunThis reverts commit 593d5af43a8e2c2a3371088fa7ae430d0517c82d. 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunFor old mali, e.g. utgard. 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 11*4882a593Smuzhiyun--- 12*4882a593Smuzhiyun libweston/renderer-gl/gl-renderer-internal.h | 2 ++ 13*4882a593Smuzhiyun libweston/renderer-gl/gl-renderer.c | 32 +++++++++++++++++--- 14*4882a593Smuzhiyun 2 files changed, 29 insertions(+), 5 deletions(-) 15*4882a593Smuzhiyun 16*4882a593Smuzhiyundiff --git a/libweston/renderer-gl/gl-renderer-internal.h b/libweston/renderer-gl/gl-renderer-internal.h 17*4882a593Smuzhiyunindex d84d9d37..aae303e3 100644 18*4882a593Smuzhiyun--- a/libweston/renderer-gl/gl-renderer-internal.h 19*4882a593Smuzhiyun+++ b/libweston/renderer-gl/gl-renderer-internal.h 20*4882a593Smuzhiyun@@ -148,6 +148,8 @@ struct gl_renderer { 21*4882a593Smuzhiyun PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window; 22*4882a593Smuzhiyun bool has_platform_base; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun+ bool has_unpack_subimage; 25*4882a593Smuzhiyun+ 26*4882a593Smuzhiyun PFNEGLBINDWAYLANDDISPLAYWL bind_display; 27*4882a593Smuzhiyun PFNEGLUNBINDWAYLANDDISPLAYWL unbind_display; 28*4882a593Smuzhiyun PFNEGLQUERYWAYLANDBUFFERWL query_buffer; 29*4882a593Smuzhiyundiff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c 30*4882a593Smuzhiyunindex 3a525698..edb2fba8 100644 31*4882a593Smuzhiyun--- a/libweston/renderer-gl/gl-renderer.c 32*4882a593Smuzhiyun+++ b/libweston/renderer-gl/gl-renderer.c 33*4882a593Smuzhiyun@@ -1793,6 +1793,7 @@ gl_renderer_flush_damage(struct weston_surface *surface, 34*4882a593Smuzhiyun { 35*4882a593Smuzhiyun const struct weston_testsuite_quirks *quirks = 36*4882a593Smuzhiyun &surface->compositor->test_data.test_quirks; 37*4882a593Smuzhiyun+ struct gl_renderer *gr = get_renderer(surface->compositor); 38*4882a593Smuzhiyun struct gl_surface_state *gs = get_surface_state(surface); 39*4882a593Smuzhiyun struct gl_buffer_state *gb = gs->buffer; 40*4882a593Smuzhiyun struct weston_view *view; 41*4882a593Smuzhiyun@@ -1835,6 +1836,27 @@ gl_renderer_flush_damage(struct weston_surface *surface, 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun glActiveTexture(GL_TEXTURE0); 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun+ if (!gr->has_unpack_subimage) { 46*4882a593Smuzhiyun+ wl_shm_buffer_begin_access(buffer->shm_buffer); 47*4882a593Smuzhiyun+ for (j = 0; j < gb->num_textures; j++) { 48*4882a593Smuzhiyun+ int hsub = pixel_format_hsub(buffer->pixel_format, j); 49*4882a593Smuzhiyun+ int vsub = pixel_format_vsub(buffer->pixel_format, j); 50*4882a593Smuzhiyun+ 51*4882a593Smuzhiyun+ glBindTexture(GL_TEXTURE_2D, gb->textures[j]); 52*4882a593Smuzhiyun+ glTexImage2D(GL_TEXTURE_2D, 0, 53*4882a593Smuzhiyun+ gb->gl_format[j], 54*4882a593Smuzhiyun+ gb->pitch / hsub, 55*4882a593Smuzhiyun+ buffer->height / vsub, 56*4882a593Smuzhiyun+ 0, 57*4882a593Smuzhiyun+ gl_format_from_internal(gb->gl_format[j]), 58*4882a593Smuzhiyun+ gb->gl_pixel_type, 59*4882a593Smuzhiyun+ data + gb->offset[j]); 60*4882a593Smuzhiyun+ } 61*4882a593Smuzhiyun+ wl_shm_buffer_end_access(buffer->shm_buffer); 62*4882a593Smuzhiyun+ 63*4882a593Smuzhiyun+ goto done; 64*4882a593Smuzhiyun+ } 65*4882a593Smuzhiyun+ 66*4882a593Smuzhiyun if (gb->needs_full_upload || quirks->gl_force_full_upload) { 67*4882a593Smuzhiyun glPixelStorei(GL_UNPACK_SKIP_PIXELS_EXT, 0); 68*4882a593Smuzhiyun glPixelStorei(GL_UNPACK_SKIP_ROWS_EXT, 0); 69*4882a593Smuzhiyun@@ -3878,11 +3900,9 @@ gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface) 70*4882a593Smuzhiyun else 71*4882a593Smuzhiyun ec->read_format = pixel_format_get_info_by_pixman(PIXMAN_a8b8g8r8); 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun- if (gr->gl_version < gr_gl_version(3, 0) && 74*4882a593Smuzhiyun- !weston_check_egl_extension(extensions, "GL_EXT_unpack_subimage")) { 75*4882a593Smuzhiyun- weston_log("GL_EXT_unpack_subimage not available.\n"); 76*4882a593Smuzhiyun- return -1; 77*4882a593Smuzhiyun- } 78*4882a593Smuzhiyun+ if (gr->gl_version >= gr_gl_version(3, 0) || 79*4882a593Smuzhiyun+ weston_check_egl_extension(extensions, "GL_EXT_unpack_subimage")) 80*4882a593Smuzhiyun+ gr->has_unpack_subimage = true; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun if (gr->gl_version >= gr_gl_version(3, 0) || 83*4882a593Smuzhiyun weston_check_egl_extension(extensions, "GL_EXT_texture_type_2_10_10_10_REV")) 84*4882a593Smuzhiyun@@ -3937,6 +3957,8 @@ gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface) 85*4882a593Smuzhiyun yesno(gr->has_gl_texture_rg)); 86*4882a593Smuzhiyun weston_log_continue(STAMP_SPACE "OES_EGL_image_external: %s\n", 87*4882a593Smuzhiyun yesno(gr->has_egl_image_external)); 88*4882a593Smuzhiyun+ weston_log_continue(STAMP_SPACE "wl_shm sub-image to texture: %s\n", 89*4882a593Smuzhiyun+ gr->has_unpack_subimage ? "yes" : "no"); 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun return 0; 92*4882a593Smuzhiyun } 93*4882a593Smuzhiyun-- 94*4882a593Smuzhiyun2.20.1 95*4882a593Smuzhiyun 96