[vlc-devel] [PATCH 05/10] opengl: make FetchLocations() infaillible

Romain Vimont rom1v at videolabs.io
Thu Jun 4 11:52:13 CEST 2020


If GetUniformLocation() returns -1, then this is an implementation
error.

Assert instead of reporting the error to the caller.
---
 modules/video_output/opengl/renderer.c |  8 +-----
 modules/video_output/opengl/sampler.c  | 38 ++++++++------------------
 modules/video_output/opengl/sampler.h  |  7 ++---
 3 files changed, 16 insertions(+), 37 deletions(-)

diff --git a/modules/video_output/opengl/renderer.c b/modules/video_output/opengl/renderer.c
index c98d2f4b76d8..0f6a7ba73f15 100644
--- a/modules/video_output/opengl/renderer.c
+++ b/modules/video_output/opengl/renderer.c
@@ -281,13 +281,7 @@ opengl_link_program(struct vlc_gl_renderer *renderer)
 #undef GET_ULOC
 #undef GET_ALOC
 
-    int ret = vlc_gl_sampler_FetchLocations(sampler, program_id);
-    assert(ret == VLC_SUCCESS);
-    if (ret != VLC_SUCCESS)
-    {
-        msg_Err(renderer->gl, "Unable to get locations from tex_conv");
-        goto error;
-    }
+    vlc_gl_sampler_FetchLocations(sampler, program_id);
 
     renderer->program_id = program_id;
 
diff --git a/modules/video_output/opengl/sampler.c b/modules/video_output/opengl/sampler.c
index 1028c5103a93..e7e4d0b49ef9 100644
--- a/modules/video_output/opengl/sampler.c
+++ b/modules/video_output/opengl/sampler.c
@@ -252,7 +252,7 @@ sampler_yuv_base_init(struct vlc_gl_sampler *sampler, vlc_fourcc_t chroma,
     return VLC_SUCCESS;
 }
 
-static int
+static void
 sampler_base_fetch_locations(struct vlc_gl_sampler *sampler, GLuint program)
 {
     struct vlc_gl_sampler_priv *priv = PRIV(sampler);
@@ -263,19 +263,16 @@ sampler_base_fetch_locations(struct vlc_gl_sampler *sampler, GLuint program)
     if (priv->yuv_color)
     {
         priv->uloc.ConvMatrix = vt->GetUniformLocation(program, "ConvMatrix");
-        if (priv->uloc.ConvMatrix == -1)
-            return VLC_EGENERIC;
+        assert(priv->uloc.ConvMatrix != -1);
     }
 
     priv->uloc.TransformMatrix =
         vt->GetUniformLocation(program, "TransformMatrix");
-    if (priv->uloc.TransformMatrix == -1)
-        return VLC_EGENERIC;
+    assert(priv->uloc.TransformMatrix != -1);
 
     priv->uloc.OrientationMatrix =
         vt->GetUniformLocation(program, "OrientationMatrix");
-    if (priv->uloc.OrientationMatrix == -1)
-        return VLC_EGENERIC;
+    assert(priv->uloc.OrientationMatrix != -1);
 
     assert(interop->tex_count < 10); /* to guarantee variable names length */
     for (unsigned int i = 0; i < interop->tex_count; ++i)
@@ -284,20 +281,17 @@ sampler_base_fetch_locations(struct vlc_gl_sampler *sampler, GLuint program)
 
         snprintf(name, sizeof(name), "Texture%1u", i);
         priv->uloc.Texture[i] = vt->GetUniformLocation(program, name);
-        if (priv->uloc.Texture[i] == -1)
-            return VLC_EGENERIC;
+        assert(priv->uloc.Texture[i] != -1);
 
         snprintf(name, sizeof(name), "TexCoordsMap%1u", i);
         priv->uloc.TexCoordsMap[i] = vt->GetUniformLocation(program, name);
-        if (priv->uloc.TexCoordsMap[i] == -1)
-            return VLC_EGENERIC;
+        assert(priv->uloc.TexCoordsMap[i] != -1);
 
         if (interop->tex_target == GL_TEXTURE_RECTANGLE)
         {
             snprintf(name, sizeof(name), "TexSize%1u", i);
             priv->uloc.TexSize[i] = vt->GetUniformLocation(program, name);
-            if (priv->uloc.TexSize[i] == -1)
-                return VLC_EGENERIC;
+            assert(priv->uloc.TexSize[i] != -1);
         }
     }
 
@@ -308,8 +302,6 @@ sampler_base_fetch_locations(struct vlc_gl_sampler *sampler, GLuint program)
         priv->uloc.pl_vars[i] = vt->GetUniformLocation(program, sv.var.name);
     }
 #endif
-
-    return VLC_SUCCESS;
 }
 
 static const GLfloat *
@@ -394,32 +386,26 @@ sampler_base_prepare_shader(const struct vlc_gl_sampler *sampler)
 #endif
 }
 
-static int
+static void
 sampler_xyz12_fetch_locations(struct vlc_gl_sampler *sampler, GLuint program)
 {
     struct vlc_gl_sampler_priv *priv = PRIV(sampler);
     const opengl_vtable_t *vt = priv->vt;
 
     priv->uloc.Texture[0] = vt->GetUniformLocation(program, "Texture0");
-    if (priv->uloc.Texture[0] == -1)
-        return VLC_EGENERIC;
+    assert(priv->uloc.Texture[0] != -1);
 
     priv->uloc.TransformMatrix =
         vt->GetUniformLocation(program, "TransformMatrix");
-    if (priv->uloc.TransformMatrix == -1)
-        return VLC_EGENERIC;
+    assert(priv->uloc.TransformMatrix != -1);
 
     priv->uloc.OrientationMatrix =
         vt->GetUniformLocation(program, "OrientationMatrix");
-    if (priv->uloc.OrientationMatrix == -1)
-        return VLC_EGENERIC;
+    assert(priv->uloc.OrientationMatrix != -1);
 
     priv->uloc.TexCoordsMap[0] =
         vt->GetUniformLocation(program, "TexCoordsMap0");
-    if (priv->uloc.TexCoordsMap[0] == -1)
-        return VLC_EGENERIC;
-
-    return VLC_SUCCESS;
+    assert(priv->uloc.TexCoordsMap[0] != -1);
 }
 
 static void
diff --git a/modules/video_output/opengl/sampler.h b/modules/video_output/opengl/sampler.h
index 4b0c305c4e71..f26820bfaba3 100644
--- a/modules/video_output/opengl/sampler.h
+++ b/modules/video_output/opengl/sampler.h
@@ -85,9 +85,8 @@ struct vlc_gl_sampler {
      *
      * \param sampler the sampler
      * \param program linked program that will be used by this sampler
-     * \return VLC_SUCCESS or a VLC error
      */
-    int (*pf_fetch_locations)(struct vlc_gl_sampler *sampler, GLuint program);
+    void (*pf_fetch_locations)(struct vlc_gl_sampler *sampler, GLuint program);
 
     /**
      * Callback to prepare the fragment shader
@@ -100,10 +99,10 @@ struct vlc_gl_sampler {
     void (*pf_prepare_shader)(const struct vlc_gl_sampler *sampler);
 };
 
-static inline int
+static inline void
 vlc_gl_sampler_FetchLocations(struct vlc_gl_sampler *sampler, GLuint program)
 {
-    return sampler->pf_fetch_locations(sampler, program);
+    sampler->pf_fetch_locations(sampler, program);
 }
 
 static inline void
-- 
2.27.0



More information about the vlc-devel mailing list