From: Marek Olšák Date: Wed, 18 Jul 2012 16:33:37 +0000 (+0200) Subject: r600g: setup streamout before calling last r600_need_cs_space before drawing X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c3c83af380d703cdc24475bd39baa1722c333b44;p=mesa.git r600g: setup streamout before calling last r600_need_cs_space before drawing This fixes CS checker errors due to registers not being initialized, because the flush occured after dirty state was emitted but before drawing. --- diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c index 2c95878ef25..f91f2654f58 100644 --- a/src/gallium/drivers/r600/r600_state_common.c +++ b/src/gallium/drivers/r600/r600_state_common.c @@ -1069,6 +1069,12 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *dinfo) r600_context_pipe_state_set(rctx, &rctx->vgt); + /* Enable stream out if needed. */ + if (rctx->streamout_start) { + r600_context_streamout_begin(rctx); + rctx->streamout_start = FALSE; + } + /* Emit states (the function expects that we emit at most 17 dwords here). */ r600_need_cs_space(rctx, 0, TRUE); @@ -1080,12 +1086,6 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *dinfo) } rctx->pm4_dirty_cdwords = 0; - /* Enable stream out if needed. */ - if (rctx->streamout_start) { - r600_context_streamout_begin(rctx); - rctx->streamout_start = FALSE; - } - /* draw packet */ cs->buf[cs->cdw++] = PKT3(PKT3_NUM_INSTANCES, 0, rctx->predicate_drawing); cs->buf[cs->cdw++] = info.instance_count;