]> code.ossystems Code Review - openembedded-core.git/blob
57e9d1a46ebeb6c442a21a9e3041f342fb6911f3
[openembedded-core.git] /
1 From 38221080181229d520522a20bcb1663ca19f7aff Mon Sep 17 00:00:00 2001
2 From: Matthew Waters <matthew@centricular.com>
3 Date: Thu, 31 Mar 2016 19:25:32 +1100
4 Subject: [PATCH 2/3] glshader: add glBindFragDataLocation
5
6 There are some cases where it's needed for binding in/out variables in shaders.
7 e.g. glsl 150 (gl 3.2) doesn't support the 'layout (location = ?)' specifiers in
8 the shader source so we have to bind them ourselves.
9
10 Upstream-Status: Backport [1.9.1]
11 ---
12  gst-libs/gst/gl/glprototypes/shaders.h | 10 ++++++++++
13  gst-libs/gst/gl/gstglshader.c          | 20 ++++++++++++++++++++
14  gst-libs/gst/gl/gstglshader.h          |  1 +
15  3 files changed, 31 insertions(+)
16
17 diff --git a/gst-libs/gst/gl/glprototypes/shaders.h b/gst-libs/gst/gl/glprototypes/shaders.h
18 index 817e479..6d828db 100644
19 --- a/gst-libs/gst/gl/glprototypes/shaders.h
20 +++ b/gst-libs/gst/gl/glprototypes/shaders.h
21 @@ -362,3 +362,13 @@ GST_GL_EXT_FUNCTION (void, UniformMatrix3x4fv,
22  GST_GL_EXT_FUNCTION (void, UniformMatrix4x3fv,
23                       (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
24  GST_GL_EXT_END ()
25 +
26 +GST_GL_EXT_BEGIN (bind_frag_data,
27 +                  GST_GL_API_OPENGL | GST_GL_API_OPENGL3,
28 +                  3, 0,
29 +                  255, 255,
30 +                  "\0",
31 +                  "\0")
32 +GST_GL_EXT_FUNCTION (void, BindFragDataLocation,
33 +                     (GLuint program, GLuint index, const GLchar * name))
34 +GST_GL_EXT_END ()
35 diff --git a/gst-libs/gst/gl/gstglshader.c b/gst-libs/gst/gl/gstglshader.c
36 index 9d96784..9f09236 100644
37 --- a/gst-libs/gst/gl/gstglshader.c
38 +++ b/gst-libs/gst/gl/gstglshader.c
39 @@ -1306,3 +1306,23 @@ gst_gl_shader_bind_attribute_location (GstGLShader * shader, GLuint index,
40  
41    gl->BindAttribLocation (priv->program_handle, index, name);
42  }
43 +
44 +void
45 +gst_gl_shader_bind_frag_data_location (GstGLShader * shader,
46 +    guint index, const gchar * name)
47 +{
48 +  GstGLShaderPrivate *priv;
49 +  GstGLFuncs *gl;
50 +
51 +  g_return_if_fail (shader != NULL);
52 +  if (!_ensure_program (shader))
53 +    g_return_if_fail (shader->priv->program_handle);
54 +  priv = shader->priv;
55 +  gl = shader->context->gl_vtable;
56 +  g_return_if_fail (gl->BindFragDataLocation);
57 +
58 +  GST_TRACE_OBJECT (shader, "binding program %i frag data \'%s\' location %i",
59 +      (int) priv->program_handle, name, index);
60 +
61 +  gl->BindFragDataLocation (priv->program_handle, index, name);
62 +}
63 diff --git a/gst-libs/gst/gl/gstglshader.h b/gst-libs/gst/gl/gstglshader.h
64 index 21410e2..2200b89 100644
65 --- a/gst-libs/gst/gl/gstglshader.h
66 +++ b/gst-libs/gst/gl/gstglshader.h
67 @@ -104,6 +104,7 @@ void gst_gl_shader_set_uniform_matrix_4x3fv (GstGLShader *shader, const gchar *n
68  
69  gint gst_gl_shader_get_attribute_location  (GstGLShader *shader, const gchar *name);
70  void gst_gl_shader_bind_attribute_location (GstGLShader * shader, guint index, const gchar * name);
71 +void gst_gl_shader_bind_frag_data_location (GstGLShader * shader, guint index, const gchar * name);
72  
73  G_END_DECLS
74  
75 -- 
76 1.9.1
77