[virglrenderer-devel] [PATCH] renderer: Protect glSampleMaski and GL_SAMPLE_MASK.

Po-Hsien Wang pwang at chromium.org
Wed Jul 18 23:24:12 UTC 2018


This works for me locally. But I would like to generate the caps using only
one code path for easier maintenance. IIUC, currently have_* and fill_caps
are doing the similar things.

On Wed, Jul 18, 2018 at 4:15 PM David Riley <davidriley at chromium.org> wrote:

> Currently based on have_multisample, but glSampleMaski isn't supported
> with the same versions.
>
> Signed-off-by: David Riley <davidriley at chromium.org>
> ---
>  src/vrend_renderer.c | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
> index 69f1da3..e358b65 100644
> --- a/src/vrend_renderer.c
> +++ b/src/vrend_renderer.c
> @@ -107,6 +107,7 @@ struct global_renderer_state {
>     bool have_arb_or_gles_ext_texture_buffer;
>     bool have_multisample;
>     bool have_ms_scaled_blit;
> +   bool have_sample_mask;
>     bool have_nv_prim_restart;
>     bool have_gl_prim_restart;
>     bool have_bit_encoding;
> @@ -4068,10 +4069,12 @@ static void vrend_hw_emit_rs(struct vrend_context
> *ctx)
>     }
>
>     if (vrend_state.have_multisample) {
> -      if (state->multisample)
> -         glEnable(GL_SAMPLE_MASK);
> -      else
> -         glDisable(GL_SAMPLE_MASK);
> +      if (vrend_state.have_sample_mask) {
> +        if (state->multisample)
> +           glEnable(GL_SAMPLE_MASK);
> +        else
> +           glDisable(GL_SAMPLE_MASK);
> +      }
>
>        /* GLES doesn't have GL_MULTISAMPLE */
>        if (!vrend_state.use_gles) {
> @@ -4537,6 +4540,9 @@ int vrend_renderer_init(struct vrend_if_cbs *cbs,
> uint32_t flags)
>        if
> (epoxy_has_gl_extension("GL_EXT_framebuffer_multisample_blit_scaled"))
>           vrend_state.have_ms_scaled_blit = true;
>     }
> +   if (gl_ver >= 32 || (gles && gl_ver >= 31) ||
> +       epoxy_has_gl_extension("GL_ARB_texture_multisample"))
> +      vrend_state.have_sample_mask = true;
>
>     if (gl_ver >= 40 || epoxy_has_gl_extension("GL_ARB_sample_shading"))
>        vrend_state.have_sample_shading = true;
> @@ -6105,7 +6111,8 @@ void vrend_set_clip_state(struct vrend_context *ctx,
> struct pipe_clip_state *ucp
>
>  void vrend_set_sample_mask(UNUSED struct vrend_context *ctx, unsigned
> sample_mask)
>  {
> -   glSampleMaski(0, sample_mask);
> +   if (vrend_state.have_sample_mask)
> +      glSampleMaski(0, sample_mask);
>  }
>
>  void vrend_set_min_samples(struct vrend_context *ctx, unsigned
> min_samples)
> --
> 2.18.0.203.gfac676dfb9-goog
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/virglrenderer-devel/attachments/20180718/6710102e/attachment-0001.html>


More information about the virglrenderer-devel mailing list