summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChia-I Wu <[email protected]>2014-09-22 10:35:59 +0800
committerChia-I Wu <[email protected]>2014-09-22 10:41:13 +0800
commit672592de7e4b05b13765f5eac777e5427f84c0f0 (patch)
treea473291201f6d0cc47d7806ef2a64a4a2c9377e9
parent17e7582465e2210f479350449b9598864728b4d0 (diff)
ilo: flush before setting SOL_RESET
SOL_RESET happens before bo execution. It should not be observed by the commands that are already in the bo. Move the code out of the pipeline now that it submits.
-rw-r--r--src/gallium/drivers/ilo/ilo_3d.c8
-rw-r--r--src/gallium/drivers/ilo/ilo_3d_pipeline.c5
2 files changed, 8 insertions, 5 deletions
diff --git a/src/gallium/drivers/ilo/ilo_3d.c b/src/gallium/drivers/ilo/ilo_3d.c
index 066a4df6282..4bc70c67d87 100644
--- a/src/gallium/drivers/ilo/ilo_3d.c
+++ b/src/gallium/drivers/ilo/ilo_3d.c
@@ -360,6 +360,14 @@ draw_vbo(struct ilo_3d *hw3d, const struct ilo_state_vector *vec)
bool success;
int max_len, before_space;
+ /* on GEN7+, we need SOL_RESET to reset the SO write offsets */
+ if (ilo_dev_gen(hw3d->pipeline->dev) >= ILO_GEN(7) &&
+ (vec->dirty & ILO_DIRTY_SO) && vec->so.enabled &&
+ !vec->so.append_bitmask) {
+ ilo_cp_submit(hw3d->cp, "SOL_RESET");
+ ilo_cp_set_one_off_flags(hw3d->cp, INTEL_EXEC_GEN7_SOL_RESET);
+ }
+
ilo_3d_own_render_ring(hw3d);
if (!hw3d->new_batch) {
diff --git a/src/gallium/drivers/ilo/ilo_3d_pipeline.c b/src/gallium/drivers/ilo/ilo_3d_pipeline.c
index cfe3c5d7977..298c2ec65b6 100644
--- a/src/gallium/drivers/ilo/ilo_3d_pipeline.c
+++ b/src/gallium/drivers/ilo/ilo_3d_pipeline.c
@@ -154,11 +154,6 @@ ilo_3d_pipeline_emit_draw(struct ilo_3d_pipeline *p,
{
bool success;
- /* on GEN7+, we need SOL_RESET to reset the SO write offsets */
- if (ilo_dev_gen(p->dev) >= ILO_GEN(7) && (vec->dirty & ILO_DIRTY_SO) &&
- vec->so.enabled && !vec->so.append_bitmask)
- ilo_cp_set_one_off_flags(p->cp, INTEL_EXEC_GEN7_SOL_RESET);
-
while (true) {
struct ilo_builder_snapshot snapshot;