[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