weston/libweston
Daniel Stone b040974398 gl-renderer: Set pitch correctly for subsampled textures
zwp_linux_dmabuf_v1 allows clients to pass an explicit pitch for each
plane, but wl_shm only takes a single pitch parameter; the pitch for
secondary planes must be inferred.

Multi-plane sub-sampled textures have partial width/height, e.g.
YUV420/I420 has a full-size Y plane, followed by a half-width/height U
plane, and a half-width/height V plane.

GStreamer's waylandsink - the only user of wl_shm YUV formats - expects
the implementation to follow the example of Xv and implicitly divide the
pitch for secondary planes by the subsampling factor. gl-renderer was
not doing this, and instead just using the (larger) stride provided by
the client for all planes in the buffer.

Fix gl-renderer to divide pitch by the subsampling factor when uploading
from subsampled SHM buffers into GL textures, also dividing co-ordinates
when doing offset partial uploads.

Tested with:
  $ gst-launch-1.0 videotestsrc ! waylandsink

Signed-off-by: Daniel Stone <daniels@collabora.com>
Reported-by: Fabien Lahoudere <fabien.lahoudere@collabora.co.uk>
Tested-by: Fabien Lahoudere <fabien.lahoudere@collabora.co.uk>
Reviewed-by: Arnaud Vrac <avrac@freebox.fr>
Acked-by: Vincent ABRIOU <vincent.abriou@st.com>
Acked-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Fixes: fdeefe4241 ("gl-renderer: add support of WL_SHM_FORMAT_YUV420")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103063
2017-12-01 16:36:38 +00:00
..
animation.c build,libweston: Use struct timespec for animations 2017-11-27 11:41:17 +02:00
bindings.c libweston: Use struct timespec for touch down events 2017-11-27 11:42:07 +02:00
clipboard.c include stdint.h for int32_t/uint32_t 2016-07-26 16:26:08 -07:00
compositor-drm.c compositor-drm, compositor-fbdev: stop suggesting root 2017-11-28 10:24:12 +02:00
compositor-drm.h compositor-drm: remove connector option 2017-09-04 15:47:03 +03:00
compositor-fbdev.c compositor-drm, compositor-fbdev: stop suggesting root 2017-11-28 10:24:12 +02:00
compositor-fbdev.h weston: Port fbdev backend to new output handling API 2016-10-03 14:24:08 +03:00
compositor-headless.c libweston: set backend pointer earlier 2017-10-04 16:18:06 +03:00
compositor-headless.h weston: Port headless backend to new output handling API 2016-10-03 14:24:08 +03:00
compositor-rdp.c libweston: Use struct timespec for compositor time 2017-11-27 11:42:07 +02:00
compositor-rdp.h weston: Port RDP backend to new output handling API 2016-10-03 14:24:08 +03:00
compositor-wayland.c libweston: Use struct timespec for touch down events 2017-11-27 11:42:07 +02:00
compositor-wayland.h compositor-wayland: Convert fullscreen flag to bool 2016-10-14 10:42:17 +02:00
compositor-x11.c libweston: Use struct timespec for compositor time 2017-11-27 11:42:07 +02:00
compositor-x11.h weston: Port X11 backend to new output handling API 2016-10-05 14:59:09 +03:00
compositor.c libweston: Use struct timespec for compositor time 2017-11-27 11:42:07 +02:00
compositor.h libweston: Use struct timespec for compositor time 2017-11-27 11:42:07 +02:00
data-device.c libweston: Use struct timespec for touch motion events 2017-11-27 11:42:07 +02:00
dbus.c include stdint.h for int32_t/uint32_t 2016-07-26 16:26:08 -07:00
dbus.h Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
gl-renderer.c gl-renderer: Set pitch correctly for subsampled textures 2017-12-01 16:36:38 +00:00
gl-renderer.h gl-renderer: Add <platform_attribs> param to gl_renderer_display_create 2016-11-07 17:06:44 +02:00
input.c libweston: Use struct timespec for touch motion events 2017-11-27 11:42:07 +02:00
launcher-direct.c configure: replace HAVE_LIBDRM with BUILD_DRM_COMPOSITOR 2017-04-07 12:02:47 +03:00
launcher-impl.h libweston/launcher: annotate iface(s) as constant data 2017-02-27 21:55:02 +00:00
launcher-logind.c logind: actually close fd in launcher_logind_close 2017-07-27 12:05:19 +03:00
launcher-util.c libweston: Use struct timespec for key events 2017-11-27 11:42:07 +02:00
launcher-util.h Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
launcher-weston-launch.c configure: replace HAVE_LIBDRM with BUILD_DRM_COMPOSITOR 2017-04-07 12:02:47 +03:00
libbacklight.c Switch to use safe_strtoint instead of strtol 2016-08-06 18:19:22 -07:00
libbacklight.h Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
libinput-device.c libweston: Use struct timespec for touch down events 2017-11-27 11:42:07 +02:00
libinput-device.h Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
libinput-seat.c input: Stop leaking libinput event source on session deactivation 2017-07-27 14:44:49 +03:00
libinput-seat.h Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
libweston-uninstalled.pc.in buildsystem: add missing pkg-config stub for libweston uninstalled 2017-11-10 12:50:41 -06:00
libweston.pc.in libweston: fix major in libweston.pc 2016-08-02 14:19:11 +03:00
linux-dmabuf.c dmabuf: Don't crash clients by sending version inappropriate events 2017-07-03 16:42:06 +01:00
linux-dmabuf.h linux-dmabuf: advertise supported formats and modifiers 2017-06-12 10:36:31 +01:00
log.c Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
noop-renderer.c include stdint.h for int32_t/uint32_t 2016-07-26 16:26:08 -07:00
pixel-formats.c libweston: Add pixel-format helpers 2017-04-07 12:28:36 +03:00
pixel-formats.h libweston: Add pixel-format helpers 2017-04-07 12:28:36 +03:00
pixman-renderer.c libweston: Use struct timespec for key events 2017-11-27 11:42:07 +02:00
pixman-renderer.h Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
plugin-registry.c compositor: add plugin-registry 2016-07-01 14:10:26 +03:00
plugin-registry.h compositor: add plugin-registry 2016-07-01 14:10:26 +03:00
screenshooter.c libweston: Use struct timespec for the output presentation timestamp 2017-11-27 11:42:07 +02:00
spring-tool.c build,libweston: Use struct timespec for animations 2017-11-27 11:41:17 +02:00
timeline-object.h Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
timeline.c timeline: Add GPU timestamp timepoint argument 2017-09-29 10:20:42 +03:00
timeline.h timeline: Add GPU timestamp timepoint argument 2017-09-29 10:20:42 +03:00
vaapi-recorder.c Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
vaapi-recorder.h Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
version.h.in Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
vertex-clipping.c Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
vertex-clipping.h Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
weston-launch.c weston-launch: improve help text for -u and -t 2017-11-28 09:18:08 +02:00
weston-launch.h Rename src/ to libweston/ 2016-06-23 17:44:54 +03:00
weston-sync-file.h libweston: Add check and fallback for linux/sync_file.h 2017-09-29 10:20:42 +03:00
windowed-output-api.h libweston: Add initial output API for windowed outputs configuration 2016-10-03 13:51:24 +03:00
zoom.c build,libweston: Use struct timespec for animations 2017-11-27 11:41:17 +02:00