96 lines
3.5 KiB
Diff
96 lines
3.5 KiB
Diff
|
|
From b715f6002072d922f325cec75acddf2054fb7374 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Jeffy Chen <jeffy.chen@rock-chips.com>
|
||
|
|
Date: Wed, 27 Apr 2022 22:59:32 +0800
|
||
|
|
Subject: [PATCH 03/95] Revert "gl-renderer: require GL_EXT_unpack_subimage"
|
||
|
|
|
||
|
|
This reverts commit 593d5af43a8e2c2a3371088fa7ae430d0517c82d.
|
||
|
|
|
||
|
|
For old mali, e.g. utgard.
|
||
|
|
|
||
|
|
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
|
||
|
|
---
|
||
|
|
libweston/renderer-gl/gl-renderer-internal.h | 2 ++
|
||
|
|
libweston/renderer-gl/gl-renderer.c | 32 +++++++++++++++++---
|
||
|
|
2 files changed, 29 insertions(+), 5 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/libweston/renderer-gl/gl-renderer-internal.h b/libweston/renderer-gl/gl-renderer-internal.h
|
||
|
|
index 3111408..744b222 100644
|
||
|
|
--- a/libweston/renderer-gl/gl-renderer-internal.h
|
||
|
|
+++ b/libweston/renderer-gl/gl-renderer-internal.h
|
||
|
|
@@ -229,6 +229,8 @@ struct gl_renderer {
|
||
|
|
PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window;
|
||
|
|
bool has_platform_base;
|
||
|
|
|
||
|
|
+ bool has_unpack_subimage;
|
||
|
|
+
|
||
|
|
PFNEGLBINDWAYLANDDISPLAYWL bind_display;
|
||
|
|
PFNEGLUNBINDWAYLANDDISPLAYWL unbind_display;
|
||
|
|
PFNEGLQUERYWAYLANDBUFFERWL query_buffer;
|
||
|
|
diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c
|
||
|
|
index 85bb356..9568732 100644
|
||
|
|
--- a/libweston/renderer-gl/gl-renderer.c
|
||
|
|
+++ b/libweston/renderer-gl/gl-renderer.c
|
||
|
|
@@ -2521,6 +2521,7 @@ gl_renderer_flush_damage(struct weston_paint_node *pnode)
|
||
|
|
struct weston_surface *surface = pnode->surface;
|
||
|
|
const struct weston_testsuite_quirks *quirks =
|
||
|
|
&surface->compositor->test_data.test_quirks;
|
||
|
|
+ struct gl_renderer *gr = get_renderer(surface->compositor);
|
||
|
|
struct weston_buffer *buffer = surface->buffer_ref.buffer;
|
||
|
|
struct gl_surface_state *gs = get_surface_state(surface);
|
||
|
|
struct gl_buffer_state *gb = gs->buffer;
|
||
|
|
@@ -2548,6 +2549,27 @@ gl_renderer_flush_damage(struct weston_paint_node *pnode)
|
||
|
|
|
||
|
|
data = wl_shm_buffer_get_data(buffer->shm_buffer);
|
||
|
|
|
||
|
|
+ if (!gr->has_unpack_subimage) {
|
||
|
|
+ wl_shm_buffer_begin_access(buffer->shm_buffer);
|
||
|
|
+ for (j = 0; j < gb->num_textures; j++) {
|
||
|
|
+ int hsub = pixel_format_hsub(buffer->pixel_format, j);
|
||
|
|
+ int vsub = pixel_format_vsub(buffer->pixel_format, j);
|
||
|
|
+
|
||
|
|
+ glBindTexture(GL_TEXTURE_2D, gb->textures[j]);
|
||
|
|
+ glTexImage2D(GL_TEXTURE_2D, 0,
|
||
|
|
+ gb->gl_format[j],
|
||
|
|
+ gb->pitch / hsub,
|
||
|
|
+ buffer->height / vsub,
|
||
|
|
+ 0,
|
||
|
|
+ gl_format_from_internal(gb->gl_format[j]),
|
||
|
|
+ gb->gl_pixel_type,
|
||
|
|
+ data + gb->offset[j]);
|
||
|
|
+ }
|
||
|
|
+ wl_shm_buffer_end_access(buffer->shm_buffer);
|
||
|
|
+
|
||
|
|
+ goto done;
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
if (gb->needs_full_upload || quirks->gl_force_full_upload) {
|
||
|
|
wl_shm_buffer_begin_access(buffer->shm_buffer);
|
||
|
|
|
||
|
|
@@ -4752,11 +4774,9 @@ gl_renderer_setup(struct weston_compositor *ec)
|
||
|
|
else
|
||
|
|
ec->read_format = pixel_format_get_info(DRM_FORMAT_ABGR8888);
|
||
|
|
|
||
|
|
- if (gr->gl_version < gr_gl_version(3, 0) &&
|
||
|
|
- !weston_check_egl_extension(extensions, "GL_EXT_unpack_subimage")) {
|
||
|
|
- weston_log("GL_EXT_unpack_subimage not available.\n");
|
||
|
|
- return -1;
|
||
|
|
- }
|
||
|
|
+ if (gr->gl_version >= gr_gl_version(3, 0) ||
|
||
|
|
+ weston_check_egl_extension(extensions, "GL_EXT_unpack_subimage"))
|
||
|
|
+ gr->has_unpack_subimage = true;
|
||
|
|
|
||
|
|
if (gr->gl_version >= gr_gl_version(3, 0) ||
|
||
|
|
weston_check_egl_extension(extensions, "GL_EXT_texture_type_2_10_10_10_REV"))
|
||
|
|
@@ -4892,6 +4912,8 @@ gl_renderer_setup(struct weston_compositor *ec)
|
||
|
|
yesno(gr->has_gl_texture_rg));
|
||
|
|
weston_log_continue(STAMP_SPACE "OES_EGL_image_external: %s\n",
|
||
|
|
yesno(gr->has_egl_image_external));
|
||
|
|
+ weston_log_continue(STAMP_SPACE "wl_shm sub-image to texture: %s\n",
|
||
|
|
+ gr->has_unpack_subimage ? "yes" : "no");
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
--
|
||
|
|
2.20.1
|
||
|
|
|