[vlc-devel] [PATCH 02/24] opengl: make fragment shader local

Alexandre Janniaux ajanni at videolabs.io
Tue Jan 28 16:40:02 CET 2020


Hi,

Looks good overall, comments inline:

On Mon, Jan 27, 2020 at 09:19:52PM +0100, Romain Vimont wrote:
> Since vlc_gl_interop has been introduced, the fragment shader is built
> by vout_helper instead of the converter module.
>
> Therefore, there is no need to keep it exposed in the
> opengl_tex_converter_t instance.
> ---
>  modules/video_output/opengl/converter.h   |  4 ---
>  modules/video_output/opengl/vout_helper.c | 43 +++++++++++------------
>  2 files changed, 20 insertions(+), 27 deletions(-)
>
> diff --git a/modules/video_output/opengl/converter.h b/modules/video_output/opengl/converter.h
> index 2d3ec4287b..11a2ab61c2 100644
> --- a/modules/video_output/opengl/converter.h
> +++ b/modules/video_output/opengl/converter.h
> @@ -59,10 +59,6 @@ struct opengl_tex_converter_t
>       * has no default precision qualifier for floating point types. */
>      const char *glsl_precision_header;
>
> -    /* Fragment shader, must be set from the module open function. It will be
> -     * deleted by the caller. */
> -    GLuint fshader;
> -
>      /* The following is used and filled by the opengl_fragment_shader_init
>       * function. */
>      struct {
> diff --git a/modules/video_output/opengl/vout_helper.c b/modules/video_output/opengl/vout_helper.c
> index a8c73074fb..dec3be50c3 100644
> --- a/modules/video_output/opengl/vout_helper.c
> +++ b/modules/video_output/opengl/vout_helper.c
> @@ -394,7 +394,24 @@ opengl_link_program(struct prgm *prgm)
>      struct vlc_gl_interop *interop = tc->interop;
>
>      GLuint vertex_shader = BuildVertexShader(tc, interop->tex_count);
> -    GLuint shaders[] = { tc->fshader, vertex_shader };
> +    if (!vertex_shader)
> +        return VLC_EGENERIC;
> +
> +    GLuint fragment_shader =
> +        opengl_fragment_shader_init(tc, interop->tex_target,
> +                                    interop->sw_fmt.i_chroma,
> +                                    interop->sw_fmt.space);
> +    if (!fragment_shader)
> +        return VLC_EGENERIC;
> +
> +    assert(fragment_shader != 0 &&
> +           interop->tex_target != 0 &&
> +           interop->tex_count > 0 &&
> +           interop->ops->update_textures != NULL &&
> +           tc->pf_fetch_locations != NULL &&
> +           tc->pf_prepare_shader != NULL);

(disclamer: I haven't checked whether it's changed after the patch)

The fragment_shader != 0 test is useless here, as is it already
checked just above. ;)

Also nit, but it might be better to split the assertions to
ease the feedback? It's not important for me though.

> +
> +    GLuint shaders[] = { fragment_shader, vertex_shader };
>
>      /* Check shaders messages */
>      for (unsigned i = 0; i < 2; i++) {
> @@ -415,12 +432,12 @@ opengl_link_program(struct prgm *prgm)
>      }
>
>      prgm->id = tc->vt->CreateProgram();
> -    tc->vt->AttachShader(prgm->id, tc->fshader);
> +    tc->vt->AttachShader(prgm->id, fragment_shader);
>      tc->vt->AttachShader(prgm->id, vertex_shader);
>      tc->vt->LinkProgram(prgm->id);
>
>      tc->vt->DeleteShader(vertex_shader);
> -    tc->vt->DeleteShader(tc->fshader);
> +    tc->vt->DeleteShader(fragment_shader);
>
>      /* Check program messages */
>      int infoLength = 0;
> @@ -623,26 +640,6 @@ opengl_init_program(vout_display_opengl_t *vgl, vlc_video_context *context,
>          return VLC_EGENERIC;
>      }
>
> -    GLuint fragment_shader =
> -        opengl_fragment_shader_init(tc, interop->tex_target,
> -                                    interop->sw_fmt.i_chroma,
> -                                    interop->sw_fmt.space);
> -    if (!fragment_shader)
> -    {
> -        vlc_object_delete(interop);
> -        free(tc);
> -        return VLC_EGENERIC;
> -    }
> -
> -    tc->fshader = fragment_shader;
> -
> -    assert(tc->fshader != 0 &&
> -           interop->tex_target != 0 &&
> -           interop->tex_count > 0 &&
> -           interop->ops->update_textures != NULL &&
> -           tc->pf_fetch_locations != NULL &&
> -           tc->pf_prepare_shader != NULL);
> -
>      prgm->tc = tc;
>
>      ret = opengl_link_program(prgm);
> --
> 2.25.0
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list