mesa/st: fix regression for basic drivers
authorErik Faye-Lund <erik.faye-lund@collabora.com>
Fri, 8 Jan 2021 10:25:34 +0000 (11:25 +0100)
committerMarge Bot <eric+marge@anholt.net>
Mon, 11 Jan 2021 16:17:25 +0000 (16:17 +0000)
Drivers that doesn't support conditional rendering can't really require
respecting conditional rendering, so let's not ask for it to be
respected in the first place.

This fixes a problem where util_can_blit_via_copy_region started
unconditionally rejecting all blits that originate from
glBlitFramebuffer, even for drivers where this can't possibly be a
problem.

Fixes: 767f70dfe13 ("gallium/util: fix util_can_blit_via_copy_region for conditional rendering")
Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8378>

src/mesa/state_tracker/st_cb_blit.c
src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_context.h

index cf55eff..fd82a7f 100644 (file)
@@ -170,7 +170,7 @@ st_BlitFramebuffer(struct gl_context *ctx,
       st_window_rectangles_to_blit(ctx, &blit);
 
    blit.filter = pFilter;
-   blit.render_condition_enable = TRUE;
+   blit.render_condition_enable = st->has_conditional_render;
    blit.alpha_blend = FALSE;
 
    if (mask & GL_COLOR_BUFFER_BIT) {
index 733a8e5..cf4ae0a 100644 (file)
@@ -709,6 +709,8 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
       !screen->get_param(screen, PIPE_CAP_CLIP_PLANES);
    st->prefer_real_buffer_in_constbuf0 =
       screen->get_param(screen, PIPE_CAP_PREFER_REAL_BUFFER_IN_CONSTBUF0);
+   st->has_conditional_render =
+      screen->get_param(screen, PIPE_CAP_CONDITIONAL_RENDER);
    st->allow_st_finalize_nir_twice = screen->finalize_nir != NULL;
 
    st->has_hw_atomics =
index f694e58..2f358bf 100644 (file)
@@ -159,6 +159,7 @@ struct st_context
    boolean lower_two_sided_color;
    boolean lower_ucp;
    boolean prefer_real_buffer_in_constbuf0;
+   boolean has_conditional_render;
 
    /* There are consequences for drivers wanting to call st_finalize_nir
     * twice, once before shader caching and once after lowering for shader