diff options
author | Andrey Konovalov <andrey.konovalov@linaro.org> | 2017-11-25 22:47:24 +0300 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-12-11 22:02:59 +0000 |
commit | 2c03e1984af7b900bb335e7931f4c66744620f1a (patch) | |
tree | b926c8144845590916485aa074fa9bbc57dd0961 | |
parent | 7e2a26a041f96a2bb51c6711a716ef006ef54113 (diff) | |
download | poky-2c03e1984af7b900bb335e7931f4c66744620f1a.tar.gz |
weston: add patch to set pitch correctly for subsampled textures
This fixes display issue with YUV420/I420 and NV12 formats, that
can result in crash of weston.
The master branch has this fix as part of commit 148920f3971d "weston:
Bump version to 3.0.0". The patch has been rebased to apply cleanly
to weston 2.0.0.
(From OE-Core rev: bdf87b453867d2f74d97c0a7e0f71902a47b11fb)
Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/recipes-graphics/wayland/weston/weston-gl-renderer-Set-pitch-correctly-for-subsampled-textures.patch | 55 | ||||
-rw-r--r-- | meta/recipes-graphics/wayland/weston_2.0.0.bb | 1 |
2 files changed, 56 insertions, 0 deletions
diff --git a/meta/recipes-graphics/wayland/weston/weston-gl-renderer-Set-pitch-correctly-for-subsampled-textures.patch b/meta/recipes-graphics/wayland/weston/weston-gl-renderer-Set-pitch-correctly-for-subsampled-textures.patch new file mode 100644 index 0000000000..c188018557 --- /dev/null +++ b/meta/recipes-graphics/wayland/weston/weston-gl-renderer-Set-pitch-correctly-for-subsampled-textures.patch | |||
@@ -0,0 +1,55 @@ | |||
1 | Multi-plane sub-sampled textures have partial width/height, e.g. | ||
2 | YUV420/I420 has a full-size Y plane, followed by a half-width/height U | ||
3 | plane, and a half-width/height V plane. | ||
4 | |||
5 | zwp_linux_dmabuf_v1 allows clients to pass an explicit pitch for each | ||
6 | plane, but for wl_shm this must be inferred. gl-renderer was correctly | ||
7 | accounting for the width and height when subsampling, but the pitch was | ||
8 | being taken as the pitch for the first plane. | ||
9 | |||
10 | This does not match the requirements for GStreamer's waylandsink, in | ||
11 | particular, as well as other clients. Fix the SHM upload path to | ||
12 | correctly set the pitch for each plane, according to subsampling. | ||
13 | |||
14 | Tested with: | ||
15 | $ gst-launch-1.0 videotestsrc ! waylandsink | ||
16 | |||
17 | Upstream-Status: Backport [https://patchwork.freedesktop.org/patch/180767/] | ||
18 | |||
19 | Signed-off-by: Daniel Stone <daniels@collabora.com> | ||
20 | Fixes: fdeefe42418 ("gl-renderer: add support of WL_SHM_FORMAT_YUV420") | ||
21 | Reported-by: Fabien Lahoudere <fabien.lahoudere@collabora.co.uk> | ||
22 | Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103063 | ||
23 | |||
24 | --- | ||
25 | libweston/gl-renderer.c | 4 ++-- | ||
26 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
27 | |||
28 | diff --git a/libweston/gl-renderer.c b/libweston/gl-renderer.c | ||
29 | index 244ce309..40bf0bb6 100644 | ||
30 | --- a/libweston/gl-renderer.c | ||
31 | +++ b/libweston/gl-renderer.c | ||
32 | @@ -1285,14 +1285,13 @@ gl_renderer_flush_damage(struct weston_surface *surface) | ||
33 | goto done; | ||
34 | } | ||
35 | |||
36 | - glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, gs->pitch); | ||
37 | - | ||
38 | if (gs->needs_full_upload) { | ||
39 | glPixelStorei(GL_UNPACK_SKIP_PIXELS_EXT, 0); | ||
40 | glPixelStorei(GL_UNPACK_SKIP_ROWS_EXT, 0); | ||
41 | wl_shm_buffer_begin_access(buffer->shm_buffer); | ||
42 | for (j = 0; j < gs->num_textures; j++) { | ||
43 | glBindTexture(GL_TEXTURE_2D, gs->textures[j]); | ||
44 | + glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, gs->pitch / gs->hsub[j]); | ||
45 | glTexImage2D(GL_TEXTURE_2D, 0, | ||
46 | gs->gl_format[j], | ||
47 | gs->pitch / gs->hsub[j], | ||
48 | @@ -1317,6 +1316,7 @@ gl_renderer_flush_damage(struct weston_surface *surface) | ||
49 | glPixelStorei(GL_UNPACK_SKIP_ROWS_EXT, r.y1); | ||
50 | for (j = 0; j < gs->num_textures; j++) { | ||
51 | glBindTexture(GL_TEXTURE_2D, gs->textures[j]); | ||
52 | + glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, gs->pitch / gs->hsub[j]); | ||
53 | glTexSubImage2D(GL_TEXTURE_2D, 0, | ||
54 | r.x1 / gs->hsub[j], | ||
55 | r.y1 / gs->vsub[j], | ||
diff --git a/meta/recipes-graphics/wayland/weston_2.0.0.bb b/meta/recipes-graphics/wayland/weston_2.0.0.bb index 54b07bd6b9..063494c9a7 100644 --- a/meta/recipes-graphics/wayland/weston_2.0.0.bb +++ b/meta/recipes-graphics/wayland/weston_2.0.0.bb | |||
@@ -12,6 +12,7 @@ SRC_URI = "https://wayland.freedesktop.org/releases/${BPN}-${PV}.tar.xz \ | |||
12 | file://0001-configure.ac-Fix-wayland-protocols-path.patch \ | 12 | file://0001-configure.ac-Fix-wayland-protocols-path.patch \ |
13 | file://xwayland.weston-start \ | 13 | file://xwayland.weston-start \ |
14 | file://0001-weston-launch-Provide-a-default-version-that-doesn-t.patch \ | 14 | file://0001-weston-launch-Provide-a-default-version-that-doesn-t.patch \ |
15 | file://weston-gl-renderer-Set-pitch-correctly-for-subsampled-textures.patch \ | ||
15 | " | 16 | " |
16 | SRC_URI[md5sum] = "15f38945942bf2a91fe2687145fb4c7d" | 17 | SRC_URI[md5sum] = "15f38945942bf2a91fe2687145fb4c7d" |
17 | SRC_URI[sha256sum] = "b4e446ac27f118196f1609dab89bb3cb3e81652d981414ad860e733b355365d8" | 18 | SRC_URI[sha256sum] = "b4e446ac27f118196f1609dab89bb3cb3e81652d981414ad860e733b355365d8" |