diff options
author | Ilia Mirkin <imirkin@alum.mit.edu> | 2014-05-03 03:00:07 -0400 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2014-05-13 10:18:05 -0700 |
commit | 407bff9db020f837f0898d8fa9c61a3463585f3a (patch) | |
tree | e50cc9df181cad663f5d027e5da0eac959664d1b /src/gallium/drivers/nouveau/nvc0/nvc0_surface.c | |
parent | 0e14b194922e76b18ed437d8b6f588f0cb3f3941 (diff) |
nv50,nvc0: leave queries on during blit, turn them on for 2d engine
Fixes the new logic of the conditional rendering piglit test.
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Ben Skeggs <bskeggs@redhat.com>
Cc: "10.2" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 4467c0c9fbf2c13b6c73a002e8247448ee12d4c4)
Diffstat (limited to 'src/gallium/drivers/nouveau/nvc0/nvc0_surface.c')
-rw-r--r-- | src/gallium/drivers/nouveau/nvc0/nvc0_surface.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c b/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c index 4a550b0bb40..acadb2cc4f1 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c @@ -503,6 +503,7 @@ struct nvc0_blitctx uint8_t mode; uint16_t color_mask; uint8_t filter; + uint8_t render_condition_enable; enum pipe_texture_target target; struct { struct pipe_framebuffer_state fb; @@ -691,7 +692,7 @@ nvc0_blitctx_prepare_state(struct nvc0_blitctx *blit) /* TODO: maybe make this a MACRO (if we need more logic) ? */ - if (blit->nvc0->cond_query) + if (blit->nvc0->cond_query && !blit->render_condition_enable) IMMED_NVC0(push, NVC0_3D(COND_MODE), NVC0_3D_COND_MODE_ALWAYS); /* blend state */ @@ -833,7 +834,7 @@ nvc0_blitctx_post_blit(struct nvc0_blitctx *blit) nvc0->textures_dirty[4] |= 3; nvc0->samplers_dirty[4] |= 3; - if (nvc0->cond_query) + if (nvc0->cond_query && !blit->render_condition_enable) nvc0->base.pipe.render_condition(&nvc0->base.pipe, nvc0->cond_query, nvc0->cond_cond, nvc0->cond_mode); @@ -868,6 +869,7 @@ nvc0_blit_3d(struct nvc0_context *nvc0, const struct pipe_blit_info *info) blit->mode = nv50_blit_select_mode(info); blit->color_mask = nv50_blit_derive_color_mask(info); blit->filter = nv50_blit_get_filter(info); + blit->render_condition_enable = info->render_condition_enable; nvc0_blit_select_fp(blit, info); nvc0_blitctx_pre_blit(blit); @@ -1030,6 +1032,9 @@ nvc0_blit_eng2d(struct nvc0_context *nvc0, const struct pipe_blit_info *info) PUSH_DATA (push, 1); /* enable */ } + if (nvc0->cond_query && info->render_condition_enable) + IMMED_NVC0(push, NVC0_2D(COND_MODE), NVC0_2D_COND_MODE_RES_NON_ZERO); + if (mask != 0xffffffff) { IMMED_NVC0(push, NVC0_2D(ROP), 0xca); /* DPSDxax */ IMMED_NVC0(push, NVC0_2D(PATTERN_COLOR_FORMAT), @@ -1154,6 +1159,8 @@ nvc0_blit_eng2d(struct nvc0_context *nvc0, const struct pipe_blit_info *info) IMMED_NVC0(push, NVC0_2D(CLIP_ENABLE), 0); if (mask != 0xffffffff) IMMED_NVC0(push, NVC0_2D(OPERATION), NVC0_2D_OPERATION_SRCCOPY); + if (nvc0->cond_query && info->render_condition_enable) + IMMED_NVC0(push, NVC0_2D(COND_MODE), NVC0_2D_COND_MODE_ALWAYS); } static void |