summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/radeonsi/si_state_streamout.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_state_streamout.c')
-rw-r--r--src/gallium/drivers/radeonsi/si_state_streamout.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/gallium/drivers/radeonsi/si_state_streamout.c b/src/gallium/drivers/radeonsi/si_state_streamout.c
index 4c38746ed16..9ba4f73517d 100644
--- a/src/gallium/drivers/radeonsi/si_state_streamout.c
+++ b/src/gallium/drivers/radeonsi/si_state_streamout.c
@@ -221,6 +221,8 @@ static void gfx10_emit_streamout_begin(struct si_context *sctx)
last_target = i;
}
+ radeon_begin(cs);
+
for (unsigned i = 0; i < sctx->streamout.num_targets; i++) {
if (!t[i])
continue;
@@ -246,6 +248,7 @@ static void gfx10_emit_streamout_begin(struct si_context *sctx)
radeon_emit(cs, 0);
radeon_emit(cs, S_414_BYTE_COUNT_GFX9(4) | S_414_DISABLE_WR_CONFIRM_GFX9(i != last_target));
}
+ radeon_end();
sctx->streamout.begin_emitted = true;
}
@@ -275,6 +278,8 @@ static void si_flush_vgt_streamout(struct si_context *sctx)
struct radeon_cmdbuf *cs = &sctx->gfx_cs;
unsigned reg_strmout_cntl;
+ radeon_begin(cs);
+
/* The register is at different places on different ASICs. */
if (sctx->chip_class >= GFX7) {
reg_strmout_cntl = R_0300FC_CP_STRMOUT_CNTL;
@@ -295,6 +300,7 @@ static void si_flush_vgt_streamout(struct si_context *sctx)
radeon_emit(cs, S_0084FC_OFFSET_UPDATE_DONE(1)); /* reference value */
radeon_emit(cs, S_0084FC_OFFSET_UPDATE_DONE(1)); /* mask */
radeon_emit(cs, 4); /* poll interval */
+ radeon_end();
}
static void si_emit_streamout_begin(struct si_context *sctx)
@@ -306,6 +312,8 @@ static void si_emit_streamout_begin(struct si_context *sctx)
si_flush_vgt_streamout(sctx);
+ radeon_begin(cs);
+
for (i = 0; i < sctx->streamout.num_targets; i++) {
if (!t[i])
continue;
@@ -344,6 +352,7 @@ static void si_emit_streamout_begin(struct si_context *sctx)
radeon_emit(cs, 0); /* unused */
}
}
+ radeon_end();
sctx->streamout.begin_emitted = true;
}
@@ -362,6 +371,8 @@ void si_emit_streamout_end(struct si_context *sctx)
si_flush_vgt_streamout(sctx);
+ radeon_begin(cs);
+
for (i = 0; i < sctx->streamout.num_targets; i++) {
if (!t[i])
continue;
@@ -383,10 +394,10 @@ void si_emit_streamout_end(struct si_context *sctx)
* buffer bound. This ensures that the primitives-emitted query
* won't increment. */
radeon_set_context_reg(cs, R_028AD0_VGT_STRMOUT_BUFFER_SIZE_0 + 16 * i, 0);
- sctx->context_roll = true;
t[i]->buf_filled_size_valid = true;
}
+ radeon_end_update_context_roll(sctx);
sctx->streamout.begin_emitted = false;
}
@@ -402,6 +413,7 @@ static void si_emit_streamout_enable(struct si_context *sctx)
{
assert(!sctx->screen->use_ngg_streamout);
+ radeon_begin(&sctx->gfx_cs);
radeon_set_context_reg_seq(&sctx->gfx_cs, R_028B94_VGT_STRMOUT_CONFIG, 2);
radeon_emit(&sctx->gfx_cs, S_028B94_STREAMOUT_0_EN(si_get_strmout_en(sctx)) |
S_028B94_RAST_STREAM(0) |
@@ -410,6 +422,7 @@ static void si_emit_streamout_enable(struct si_context *sctx)
S_028B94_STREAMOUT_3_EN(si_get_strmout_en(sctx)));
radeon_emit(&sctx->gfx_cs,
sctx->streamout.hw_enabled_mask & sctx->streamout.enabled_stream_buffers_mask);
+ radeon_end();
}
static void si_set_streamout_enable(struct si_context *sctx, bool enable)