diff options
Diffstat (limited to 'src/intel_batchbuffer.c')
-rw-r--r-- | src/intel_batchbuffer.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/intel_batchbuffer.c b/src/intel_batchbuffer.c index f310793..90fdd0f 100644 --- a/src/intel_batchbuffer.c +++ b/src/intel_batchbuffer.c @@ -163,8 +163,21 @@ intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch) if (IS_GEN6(intel->device_id) || IS_GEN7(intel->device_id)) { - if (batch->flag == I915_EXEC_RENDER) { - BEGIN_BATCH(batch, 4); + if (batch->flag == I915_EXEC_RENDER) { BEGIN_BATCH(batch, 3*4); + /* work-around flushes */ + OUT_BATCH(batch, CMD_PIPE_CONTROL | (4 - 2)); + OUT_BATCH(batch, CMD_PIPE_CONTROL_CS_STALL | + CMD_PIPE_CONTROL_STALL_AT_SCOREBOARD); + OUT_BATCH(batch, 0); /* address */ + OUT_BATCH(batch, 0); /* write data */ + + OUT_BATCH(batch, CMD_PIPE_CONTROL | (4 - 2)); + OUT_BATCH(batch, CMD_PIPE_CONTROL_WRITE_QWORD); + OUT_RELOC(batch, intel->wa_scratch_bo, I915_GEM_DOMAIN_INSTRUCTION, + I915_GEM_DOMAIN_INSTRUCTION, 0); + OUT_BATCH(batch, 0); /* write data */ + + /* and now the actual flush */ OUT_BATCH(batch, CMD_PIPE_CONTROL | 0x2); if (IS_GEN6(intel->device_id)) |