glsl: fixup external-oes shaders by mangling the required extension
authorMatthew Waters <matthew@centricular.com>
Wed, 15 Jun 2016 02:47:05 +0000 (12:47 +1000)
committerMatthew Waters <matthew@centricular.com>
Tue, 21 Jun 2016 11:27:47 +0000 (21:27 +1000)
commitd3f3787d64bd0adb56bd2052e733e61f10f55acf
treec2ccc5144d82b3a5ce0fdc5fd64f834deb272c70
parent28f0df681c9a016fa847c92b8b7986f66ea5fc85
glsl: fixup external-oes shaders by mangling the required extension

Newer devices require using a different GLSL extension for accessing
external-oes textures in a shader using the texture() functions.

While the GL_OES_EGL_image_external_essl3 should supposedly be supported
on a any GLES3 android device, the extension was defined after a lot of the
older drivers were built so they will not know about it.  Thus there are two
possible interpretations of which of texture[2D]() should be supported for
external-oes textures.  Strict adherence to the GL_OES_EGL_image_external
extension spec which uses texture2D() or following GLES3's pattern, also
allowing texture() as a function for accessing external-oes textures

This adds another mangling pass to convert
 #extension GL_OES_EGL_image_external : ...
into
 #extension GL_OES_EGL_image_external_essl3 : ...
on GLES3 and when the GL_OES_EGL_image_external_essl3 extension is supported.

Only uses texture() when the GLES3 and the GL_OES_EGL_image_external_essl3
extension is supported for external-oes textures.
Uses GLES2 + texture2D() + GL_OES_EGL_image_external in all other external-oes
cases.

https://bugzilla.gnome.org/show_bug.cgi?id=766993
gst-libs/gst/gl/gstglcolorconvert.c
gst-libs/gst/gl/gstglsl.c
gst-libs/gst/gl/gstglsl_private.h
gst-libs/gst/gl/gstglviewconvert.c