From 4467c0c9fbf2c13b6c73a002e8247448ee12d4c4 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Sat, 3 May 2014 03:00:07 -0400 Subject: 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 Reviewed-by: Ben Skeggs Cc: "10.2" --- src/gallium/drivers/nouveau/nvc0/nvc0_query.c | 5 ++++- src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 2 ++ src/gallium/drivers/nouveau/nvc0/nvc0_surface.c | 11 +++++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) (limited to 'src/gallium/drivers/nouveau/nvc0') diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c index 21aa3580e7c..856f685ceb6 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c @@ -585,12 +585,15 @@ nvc0_render_condition(struct pipe_context *pipe, if (wait) nvc0_query_fifo_wait(push, pq); - PUSH_SPACE(push, 4); + PUSH_SPACE(push, 7); PUSH_REFN (push, q->bo, NOUVEAU_BO_GART | NOUVEAU_BO_RD); BEGIN_NVC0(push, NVC0_3D(COND_ADDRESS_HIGH), 3); PUSH_DATAh(push, q->bo->offset + q->offset); PUSH_DATA (push, q->bo->offset + q->offset); PUSH_DATA (push, cond); + BEGIN_NVC0(push, NVC0_2D(COND_ADDRESS_HIGH), 2); + PUSH_DATAh(push, q->bo->offset + q->offset); + PUSH_DATA (push, q->bo->offset + q->offset); } void diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c index 2166788e00e..1da991c8d13 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c @@ -677,6 +677,8 @@ nvc0_screen_create(struct nouveau_device *dev) PUSH_DATA (push, 0x3f); BEGIN_NVC0(push, SUBC_2D(0x0888), 1); PUSH_DATA (push, 1); + BEGIN_NVC0(push, NVC0_2D(COND_MODE), 1); + PUSH_DATA (push, NVC0_2D_COND_MODE_ALWAYS); BEGIN_NVC0(push, SUBC_2D(NVC0_GRAPH_NOTIFY_ADDRESS_HIGH), 2); PUSH_DATAh(push, screen->fence.bo->offset + 16); 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 -- cgit v1.2.3