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