summaryrefslogtreecommitdiff
path: root/libweston/gl-renderer.c
AgeCommit message (Collapse)AuthorFilesLines
2016-08-15gl-renderer, simple-dmabuf-v4l: fix dmabuf y-invertPekka Paalanen1-1/+7
Invert the Y_INVERT flag for the EGL import fo dmabufs. This fixes weston-simple-dmabuf-intel to show the same image on both GL-composited and with direct scanout on a hardware plane. Before, the image would y-flip when switching between these two cases. Now the orientation also matches the color values written in simple-dmabuf-intel.c. The GL-renderer uses the OpenGL convention of texture coordinates, where the origin is at the bottom-left of an image. This can be observed in texture_region() where the texcoords are inverted if y_invert is false, since the surface coordinates have origin at top-left. Both wl_shm and dmabuf buffers have origin at the top-left. When wl_shm buffer is imported with glTexImage2D, it gets inverted because glTexImage2D is defined to read in the bottom row first. The shm data is top row first. This incidentally also means, that buffer pixel 0,0 ends up at texture coordinates 0,0. This is now inverted compared to the GL coordinate convention, and therefore gl_renderer_attach_shm() sets y_inverted to true. This causes texture_region() to NOT invert the texcoords. Wayland surface coordinates have origin at top-left, hence the double-inversion. Dmabuf buffers also have the origin at top-left. However, they are imported via EGL to GL, where they should get the GL oriented coordinates but they do not. It is as if pixel 0,0 ends up at texcoords 0,0 - the same thing as with wl_shm buffers. Therefore we need to invert the invert flag. Too bad EGL_EXT_image_dma_buf_import does not seem to specify the image orientation. The GL spec implied result seems to conflict with the reality in Mesa 11.2.2. I asked about this in the Mesa developer mailing list. The question with no answers: https://lists.freedesktop.org/archives/mesa-dev/2016-June/120249.html and the thread I hijacked to get some answers: https://lists.freedesktop.org/archives/mesa-dev/2016-June/120733.html which culminated to the conclusion: https://lists.freedesktop.org/archives/mesa-dev/2016-June/120955.html that supports this patch. simple-dmabuf-v4l is equally fixed to not add Y_INVERT. There is no rational reason to have it, and removing is necessary together with the GL-renderer change to keep the image the right way up. This has been tested with VIVID. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
2016-08-15gl-renderer: Silence maybe-uninitialized warningQuentin Glidic1-1/+1
libweston/gl-renderer.c: In function 'compress_bands': libweston/gl-renderer.c:481:6: warning: 'merged' may be used uninitialized in this function [-Wmaybe-uninitialized] if (!merged) { ^ Warning produced by GCC 5.3 and 6.1, with -Og. Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net> Reviewed-by: Yong Bakos <ybakos@humanoriented.com> Reviewed-by: Giulio Camuffo <giuliocamuffo@gmail.com>
2016-08-11gl-renderer: Make dummy surface current after all outputs are goneArmin Krezović1-0/+22
When all outputs are gone, there are no current read/write surfaces associated with a context. This makes the previously created dummy surface current until an output gets attached to avoid any potential crashes. v2: - Remove unnecessary objects Signed-off-by: Armin Krezović <krezovic.armin@gmail.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-07-26include stdint.h for int32_t/uint32_tJussi Kukkonen1-0/+1
Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com> Reviewed-by: Yong Bakos <ybakos@humanoriented.com>
2016-07-22gl-renderer: move check_extension() to shared/Emil Velikov1-43/+16
... prefixing it with a "weston_". This way we can reuse it across the board, instead of the current strstr. The latter of which can give us false positives, thus it will be resolved with next commit(s). Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Daniel Stone <daniels@collabora.com>
2016-07-22gl-renderer: remove EGL_EXT_image_dma_buf_import guardsEmil Velikov1-2/+0
We provide a (workaround) definition in weston-egl-ext.h, thus we don't need any guards. Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Daniel Stone <daniels@collabora.com>
2016-07-22weston-egl-ext.h: add GL_EXT_unpack_subimage definitionsEmil Velikov1-9/+0
... and use it in gl-renderer. Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Daniel Stone <daniels@collabora.com>
2016-07-22weston-egl-ext.h: add EGL_MESA_configless_context definitionsEmil Velikov1-4/+0
... and use it in gl-renderer. Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Daniel Stone <daniels@collabora.com>
2016-07-22weston-egl-ext.h: add EGL_EXT_swap_buffers_with_damage definitionsEmil Velikov1-12/+0
... and use it from simple-egl and gl-renderer. Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Daniel Stone <daniels@collabora.com>
2016-06-27gl-renderer: Always setup gl-rendererArmin Krezović1-6/+65
Currently, the gl-renderer setup is being done on per-output basis. This isn't desirable when trying to make weston run with zero outputs. When there are no outputs present, there is no surface available to attach an EGLContext to with eglMakeCurrent, which makes any EGL command fail. The problem is solved by using EGL_KHR_surfaceless_context to bind an EGLContext to EGL_NO_SURFACE, or if that is unavailable, creating a dummy PbufferSurface and binding an EGLContext to it, so EGL gets set up properly. v2: - Move PbufferSurface creation into its own function - Introduce a new EGLConfig with EGL_PBUFFER_BIT set and use it to create a PbufferSurface - Make PbufferSurface attributes definition static - Check for return of gl_renderer_setup and terminate in case it fails - Remove redundant gl_renderer_setup call from gl_renderer_output_create - Only destroy the dummy surface if it is valid This patch causes a warning from Mesa when using the i965 driver: libEGL warning: FIXME: egl/x11 doesn't support front buffer rendering. A bug has been filed about it since it seems to be spurious: https://bugs.freedesktop.org/show_bug.cgi?id=96694 Signed-off-by: Armin Krezović <krezovic.armin@gmail.com> [Pekka: filed a Mesa bug and added the note in commit msg] Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-06-23Rename src/ to libweston/Pekka Paalanen1-0/+3157
This clarifies what is supposed to be the libweston code. v2: screen-share.c is already in compositor/ instead. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Yong Bakos <ybakos@humanoriented.com> Acked-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net> Tested-by: Quentin Glidic <sardemff7+git@sardemff7.net> Tested-by: Benoit Gschwind <gschwind@gnu-log.net> Acked-by: Benoit Gschwind <gschwind@gnu-log.net> [Pekka: rebased]