On Sun, May 11, 2014 at 10:34 AM, Ilia Mirkin <imir...@alum.mit.edu> wrote: > Fixes the new logic of the conditional rendering piglit test. > > Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> > Cc: "10.2" <mesa-sta...@lists.freedesktop.org> Reviewed-by: Ben Skeggs <bske...@redhat.com>
> --- > src/gallium/drivers/nouveau/nv50/nv50_query.c | 6 +++++- > src/gallium/drivers/nouveau/nv50/nv50_screen.c | 2 ++ > src/gallium/drivers/nouveau/nv50/nv50_surface.c | 15 +++++++++++++-- > 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 +++++++++-- > 6 files changed, 35 insertions(+), 6 deletions(-) > > diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query.c > b/src/gallium/drivers/nouveau/nv50/nv50_query.c > index 6f25a08..6a17139 100644 > --- a/src/gallium/drivers/nouveau/nv50/nv50_query.c > +++ b/src/gallium/drivers/nouveau/nv50/nv50_query.c > @@ -332,7 +332,7 @@ nv50_render_condition(struct pipe_context *pipe, > nv50->cond_cond = condition; > nv50->cond_mode = mode; > > - PUSH_SPACE(push, 6); > + PUSH_SPACE(push, 9); > > if (!pq) { > BEGIN_NV04(push, NV50_3D(COND_MODE), 1); > @@ -351,6 +351,10 @@ nv50_render_condition(struct pipe_context *pipe, > PUSH_DATAh(push, q->bo->offset + q->offset); > PUSH_DATA (push, q->bo->offset + q->offset); > PUSH_DATA (push, NV50_3D_COND_MODE_RES_NON_ZERO); > + > + BEGIN_NV04(push, NV50_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/nv50/nv50_screen.c > b/src/gallium/drivers/nouveau/nv50/nv50_screen.c > index fcac3c1..68d30ea 100644 > --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c > +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c > @@ -398,6 +398,8 @@ nv50_screen_init_hwctx(struct nv50_screen *screen) > PUSH_DATA (push, 0); > BEGIN_NV04(push, SUBC_2D(0x0888), 1); > PUSH_DATA (push, 1); > + BEGIN_NV04(push, NV50_2D(COND_MODE), 1); > + PUSH_DATA (push, NV50_2D_COND_MODE_ALWAYS); > > BEGIN_NV04(push, SUBC_3D(NV01_SUBCHAN_OBJECT), 1); > PUSH_DATA (push, screen->tesla->handle); > diff --git a/src/gallium/drivers/nouveau/nv50/nv50_surface.c > b/src/gallium/drivers/nouveau/nv50/nv50_surface.c > index 6b4dc4d..df3bc86 100644 > --- a/src/gallium/drivers/nouveau/nv50/nv50_surface.c > +++ b/src/gallium/drivers/nouveau/nv50/nv50_surface.c > @@ -611,6 +611,7 @@ struct nv50_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; > @@ -933,7 +934,7 @@ nv50_blitctx_prepare_state(struct nv50_blitctx *blit) > { > struct nouveau_pushbuf *push = blit->nv50->base.pushbuf; > > - if (blit->nv50->cond_query) { > + if (blit->nv50->cond_query && !blit->render_condition_enable) { > BEGIN_NV04(push, NV50_3D(COND_MODE), 1); > PUSH_DATA (push, NV50_3D_COND_MODE_ALWAYS); > } > @@ -1071,7 +1072,7 @@ nv50_blitctx_post_blit(struct nv50_blitctx *blit) > nv50->samplers[2][0] = blit->saved.sampler[0]; > nv50->samplers[2][1] = blit->saved.sampler[1]; > > - if (nv50->cond_query) > + if (nv50->cond_query && !blit->render_condition_enable) > nv50->base.pipe.render_condition(&nv50->base.pipe, nv50->cond_query, > nv50->cond_cond, nv50->cond_mode); > > @@ -1105,6 +1106,7 @@ nv50_blit_3d(struct nv50_context *nv50, 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; > > nv50_blit_select_fp(blit, info); > nv50_blitctx_pre_blit(blit); > @@ -1262,6 +1264,11 @@ nv50_blit_eng2d(struct nv50_context *nv50, const > struct pipe_blit_info *info) > PUSH_DATA (push, 1); /* enable */ > } > > + if (nv50->cond_query && info->render_condition_enable) { > + BEGIN_NV04(push, NV50_2D(COND_MODE), 1); > + PUSH_DATA (push, NV50_2D_COND_MODE_RES_NON_ZERO); > + } > + > if (mask != 0xffffffff) { > BEGIN_NV04(push, NV50_2D(ROP), 1); > PUSH_DATA (push, 0xca); /* DPSDxax */ > @@ -1384,6 +1391,10 @@ nv50_blit_eng2d(struct nv50_context *nv50, const > struct pipe_blit_info *info) > BEGIN_NV04(push, NV50_2D(OPERATION), 1); > PUSH_DATA (push, NV50_2D_OPERATION_SRCCOPY); > } > + if (nv50->cond_query && info->render_condition_enable) { > + BEGIN_NV04(push, NV50_2D(COND_MODE), 1); > + PUSH_DATA (push, NV50_2D_COND_MODE_ALWAYS); > + } > } > > static void > diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c > b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c > index 21aa358..856f685 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 2166788..1da991c 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 4a550b0..acadb2c 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 > -- > 1.8.5.5 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev