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