Move gen5 blitter work-around to lib

Suggested by Chris Wilson to prevent utterly strange gpu hangs.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Daniel Vetter 2011-03-25 22:09:28 +01:00
parent bfa6f5d94f
commit ad515f817a
2 changed files with 9 additions and 14 deletions

View File

@ -72,6 +72,8 @@ intel_batchbuffer_free(struct intel_batchbuffer *batch)
free(batch); free(batch);
} }
#define CMD_POLY_STIPPLE_OFFSET 0x7906
void void
intel_batchbuffer_flush(struct intel_batchbuffer *batch) intel_batchbuffer_flush(struct intel_batchbuffer *batch)
{ {
@ -82,6 +84,13 @@ intel_batchbuffer_flush(struct intel_batchbuffer *batch)
if (used == 0) if (used == 0)
return; return;
if (IS_GEN5(batch->devid)) {
BEGIN_BATCH(2);
OUT_BATCH(CMD_POLY_STIPPLE_OFFSET << 16);
OUT_BATCH(0);
ADVANCE_BATCH();
}
/* Round batchbuffer usage to 2 DWORDs. */ /* Round batchbuffer usage to 2 DWORDs. */
if ((used & 4) == 0) { if ((used & 4) == 0) {
*(uint32_t *) (batch->ptr) = 0; /* noop */ *(uint32_t *) (batch->ptr) = 0; /* noop */

View File

@ -166,13 +166,6 @@ static void keep_gpu_busy(void)
OUT_BATCH(src_pitch); OUT_BATCH(src_pitch);
OUT_RELOC(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0); OUT_RELOC(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
ADVANCE_BATCH(); ADVANCE_BATCH();
if (IS_GEN5(devid)) {
BEGIN_BATCH(2);
OUT_BATCH(CMD_POLY_STIPPLE_OFFSET << 16);
OUT_BATCH(0);
ADVANCE_BATCH();
}
} }
static unsigned int copyfunc_seq = 0; static unsigned int copyfunc_seq = 0;
@ -288,13 +281,6 @@ static void blitter_copyfunc(struct scratch_buf *src, unsigned src_x, unsigned s
OUT_RELOC(src->bo, I915_GEM_DOMAIN_RENDER, 0, 0); OUT_RELOC(src->bo, I915_GEM_DOMAIN_RENDER, 0, 0);
ADVANCE_BATCH(); ADVANCE_BATCH();
if (IS_GEN5(devid)) {
BEGIN_BATCH(2);
OUT_BATCH(CMD_POLY_STIPPLE_OFFSET << 16);
OUT_BATCH(0);
ADVANCE_BATCH();
}
if (!(keep_gpu_busy_counter & 1) && !fence_storm) if (!(keep_gpu_busy_counter & 1) && !fence_storm)
keep_gpu_busy(); keep_gpu_busy();