mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2026-08-20 12:52:55 +00:00
batch: Specify number of relocations to accommodate
Since relocations are variable size, depending upon generation, it is easier to handle the resizing of the batch request inside the BEGIN_BATCH macro. This still leaves us with having to resize commands in a few places - which still need adaption for gen8+. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
@@ -360,9 +360,7 @@ intel_blt_copy(struct intel_batchbuffer *batch,
|
||||
igt_fail(1);
|
||||
}
|
||||
|
||||
BEGIN_BATCH(gen >= 8 ? 10 : 8);
|
||||
OUT_BATCH(XY_SRC_COPY_BLT_CMD | cmd_bits |
|
||||
(gen >= 8 ? 8 : 6));
|
||||
BLIT_COPY_BATCH_START(cmd_bits);
|
||||
OUT_BATCH((br13_bits) |
|
||||
(0xcc << 16) | /* copy ROP */
|
||||
dst_pitch);
|
||||
@@ -376,12 +374,14 @@ intel_blt_copy(struct intel_batchbuffer *batch,
|
||||
|
||||
#define CMD_POLY_STIPPLE_OFFSET 0x7906
|
||||
if (gen == 5) {
|
||||
BEGIN_BATCH(2, 0);
|
||||
OUT_BATCH(CMD_POLY_STIPPLE_OFFSET << 16);
|
||||
OUT_BATCH(0);
|
||||
ADVANCE_BATCH();
|
||||
}
|
||||
|
||||
if (gen >= 6 && src_bo == dst_bo) {
|
||||
BEGIN_BATCH(3);
|
||||
BEGIN_BATCH(3, 0);
|
||||
OUT_BATCH(XY_SETUP_CLIP_BLT_CMD);
|
||||
OUT_BATCH(0);
|
||||
OUT_BATCH(0);
|
||||
|
||||
+20
-30
@@ -77,6 +77,7 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
|
||||
/**
|
||||
* BEGIN_BATCH:
|
||||
* @n: number of DWORDS to emit
|
||||
* @r: number of RELOCS to emit
|
||||
*
|
||||
* Prepares a batch to emit @n DWORDS, flushing it if there's not enough space
|
||||
* available.
|
||||
@@ -84,10 +85,13 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
|
||||
* This macro needs a pointer to an #intel_batchbuffer structure called batch in
|
||||
* scope.
|
||||
*/
|
||||
#define BEGIN_BATCH(n) do { \
|
||||
#define BEGIN_BATCH(n, r) do { \
|
||||
int __n = (n); \
|
||||
igt_assert(batch->end == NULL); \
|
||||
intel_batchbuffer_require_space(batch, (n)*4); \
|
||||
batch->end = batch->ptr + (n) * 4; \
|
||||
if (batch->gen >= 8) __n += r; \
|
||||
__n *= 4; \
|
||||
intel_batchbuffer_require_space(batch, __n); \
|
||||
batch->end = batch->ptr + __n; \
|
||||
} while (0)
|
||||
|
||||
/**
|
||||
@@ -150,35 +154,21 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
|
||||
batch->end = NULL; \
|
||||
} while(0)
|
||||
|
||||
#define BLIT_COPY_BATCH_START(devid, flags) do { \
|
||||
if (intel_gen(devid) >= 8) { \
|
||||
BEGIN_BATCH(10); \
|
||||
OUT_BATCH(XY_SRC_COPY_BLT_CMD | \
|
||||
XY_SRC_COPY_BLT_WRITE_ALPHA | \
|
||||
XY_SRC_COPY_BLT_WRITE_RGB | \
|
||||
(flags) | 8); \
|
||||
} else { \
|
||||
BEGIN_BATCH(8); \
|
||||
OUT_BATCH(XY_SRC_COPY_BLT_CMD | \
|
||||
XY_SRC_COPY_BLT_WRITE_ALPHA | \
|
||||
XY_SRC_COPY_BLT_WRITE_RGB | \
|
||||
(flags) | 6); \
|
||||
} \
|
||||
#define BLIT_COPY_BATCH_START(flags) do { \
|
||||
BEGIN_BATCH(8, 2); \
|
||||
OUT_BATCH(XY_SRC_COPY_BLT_CMD | \
|
||||
XY_SRC_COPY_BLT_WRITE_ALPHA | \
|
||||
XY_SRC_COPY_BLT_WRITE_RGB | \
|
||||
(flags) | \
|
||||
(6 + (2*batch->gen >= 8))); \
|
||||
} while(0)
|
||||
|
||||
#define COLOR_BLIT_COPY_BATCH_START(devid, flags) do { \
|
||||
if (intel_gen(devid) >= 8) { \
|
||||
BEGIN_BATCH(8); \
|
||||
OUT_BATCH(MI_NOOP); \
|
||||
OUT_BATCH(XY_COLOR_BLT_CMD_NOLEN | 0x5 | \
|
||||
COLOR_BLT_WRITE_ALPHA | \
|
||||
XY_COLOR_BLT_WRITE_RGB); \
|
||||
} else { \
|
||||
BEGIN_BATCH(6); \
|
||||
OUT_BATCH(XY_COLOR_BLT_CMD_NOLEN | 0x4 | \
|
||||
COLOR_BLT_WRITE_ALPHA | \
|
||||
XY_COLOR_BLT_WRITE_RGB); \
|
||||
} \
|
||||
#define COLOR_BLIT_COPY_BATCH_START(flags) do { \
|
||||
BEGIN_BATCH(6, 1); \
|
||||
OUT_BATCH(XY_COLOR_BLT_CMD_NOLEN | \
|
||||
COLOR_BLT_WRITE_ALPHA | \
|
||||
XY_COLOR_BLT_WRITE_RGB | \
|
||||
(4 + (batch->gen >= 8))); \
|
||||
} while(0)
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user