diff options
author | Russell King <rmk@arm.linux.org.uk> | 2015-06-01 12:28:13 +0100 |
---|---|---|
committer | Russell King <rmk@arm.linux.org.uk> | 2015-06-29 12:58:33 +0100 |
commit | b59f72c890fc8ac82b620d6e0ff38ce399abe7ad (patch) | |
tree | 175dcb5b3582dd608eba4358f194eb0fa78afc12 | |
parent | 9be28a238209b2a0f91c86804627d2c2c34889fd (diff) |
etnaviv: convert etnaviv_set_*_bo() to take etnaviv_blit_buf
Convert etnaviv_set_source_bo() and etnaviv_set_dest_bo() to take a
pointer to the etnaviv_blit_buf structure, rather than individual
members of this struct.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
-rw-r--r-- | etnaviv/etnaviv_accel.c | 11 | ||||
-rw-r--r-- | etnaviv/etnaviv_accel.h | 2 | ||||
-rw-r--r-- | etnaviv/etnaviv_op.c | 44 |
3 files changed, 30 insertions, 27 deletions
diff --git a/etnaviv/etnaviv_accel.c b/etnaviv/etnaviv_accel.c index 252c2a1..1b06c37 100644 --- a/etnaviv/etnaviv_accel.c +++ b/etnaviv/etnaviv_accel.c @@ -2136,8 +2136,15 @@ Bool etnaviv_accel_init(struct etnaviv *etnaviv) * consecutive operations. */ if (etnaviv->conn->chip.chip_model == chipModel_GC320) { - etnaviv->gc320_etna_bo = etna_bo_new(etnaviv->conn, 4096, - DRM_ETNA_GEM_TYPE_BMP); + struct etnaviv_format fmt = { .format = DE_FORMAT_A1R5G5B5 }; + xPoint offset = { 0, -1 }; + struct etna_bo *bo; + + bo = etna_bo_new(etnaviv->conn, 4096, DRM_ETNA_GEM_TYPE_BMP); + etnaviv->gc320_etna_bo = bo; + etnaviv->gc320_wa_src = INIT_BLIT_BO(bo, 64, fmt, offset); + etnaviv->gc320_wa_dst = INIT_BLIT_BO(bo, 64, fmt, ZERO_OFFSET); + /* reserve some additional batch space */ etnaviv->batch_de_high_watermark -= 22; diff --git a/etnaviv/etnaviv_accel.h b/etnaviv/etnaviv_accel.h index e1deb6d..442e7a8 100644 --- a/etnaviv/etnaviv_accel.h +++ b/etnaviv/etnaviv_accel.h @@ -79,6 +79,8 @@ struct etnaviv { Bool force_fallback; struct drm_armada_bufmgr *bufmgr; uint32_t bugs[1]; + struct etnaviv_blit_buf gc320_wa_src; + struct etnaviv_blit_buf gc320_wa_dst; struct etna_bo *gc320_etna_bo; int scrnIndex; #ifdef HAVE_DRI2 diff --git a/etnaviv/etnaviv_op.c b/etnaviv/etnaviv_op.c index 4c59a42..e33122b 100644 --- a/etnaviv/etnaviv_op.c +++ b/etnaviv/etnaviv_op.c @@ -34,35 +34,35 @@ static inline uint32_t etnaviv_src_config(struct etnaviv_format fmt, return src_cfg; } -static void etnaviv_set_source_bo(struct etnaviv *etnaviv, struct etna_bo *bo, - uint32_t pitch, struct etnaviv_format format, const xPoint offset) +static void etnaviv_set_source_bo(struct etnaviv *etnaviv, + const struct etnaviv_blit_buf *buf) { - uint32_t src_cfg = etnaviv_src_config(format, true); + uint32_t src_cfg = etnaviv_src_config(buf->format, true); EMIT_LOADSTATE(etnaviv, VIVS_DE_SRC_ADDRESS, 5); - EMIT_RELOC(etnaviv, bo, 0, FALSE); - EMIT(etnaviv, VIVS_DE_SRC_STRIDE_STRIDE(pitch)); + EMIT_RELOC(etnaviv, buf->bo, 0, FALSE); + EMIT(etnaviv, VIVS_DE_SRC_STRIDE_STRIDE(buf->pitch)); EMIT(etnaviv, VIVS_DE_SRC_ROTATION_CONFIG_ROTATION_DISABLE); EMIT(etnaviv, src_cfg); - EMIT(etnaviv, VIVS_DE_SRC_ORIGIN_X(offset.x) | - VIVS_DE_SRC_ORIGIN_Y(offset.y)); + EMIT(etnaviv, VIVS_DE_SRC_ORIGIN_X(buf->offset.x) | + VIVS_DE_SRC_ORIGIN_Y(buf->offset.y)); EMIT_ALIGN(etnaviv); } -static void etnaviv_set_dest_bo(struct etnaviv *etnaviv, struct etna_bo *bo, - uint32_t pitch, struct etnaviv_format fmt, uint32_t cmd) +static void etnaviv_set_dest_bo(struct etnaviv *etnaviv, + const struct etnaviv_blit_buf *buf, uint32_t cmd) { uint32_t dst_cfg; - dst_cfg = VIVS_DE_DEST_CONFIG_FORMAT(fmt.format) | cmd | - VIVS_DE_DEST_CONFIG_SWIZZLE(fmt.swizzle); + dst_cfg = VIVS_DE_DEST_CONFIG_FORMAT(buf->format.format) | cmd | + VIVS_DE_DEST_CONFIG_SWIZZLE(buf->format.swizzle); - if (fmt.tile) + if (buf->format.tile) dst_cfg |= VIVS_DE_DEST_CONFIG_TILED_ENABLE; EMIT_LOADSTATE(etnaviv, VIVS_DE_DEST_ADDRESS, 4); - EMIT_RELOC(etnaviv, bo, 0, TRUE); - EMIT(etnaviv, VIVS_DE_DEST_STRIDE_STRIDE(pitch)); + EMIT_RELOC(etnaviv, buf->bo, 0, TRUE); + EMIT(etnaviv, VIVS_DE_DEST_STRIDE_STRIDE(buf->pitch)); EMIT(etnaviv, VIVS_DE_DEST_ROTATION_CONFIG_ROTATION_DISABLE); EMIT(etnaviv, dst_cfg); EMIT_ALIGN(etnaviv); @@ -154,10 +154,8 @@ void etnaviv_de_start(struct etnaviv *etnaviv, const struct etnaviv_de_op *op) BATCH_SETUP_START(etnaviv); if (op->src.bo) - etnaviv_set_source_bo(etnaviv, op->src.bo, op->src.pitch, - op->src.format, op->src.offset); - etnaviv_set_dest_bo(etnaviv, op->dst.bo, op->dst.pitch, op->dst.format, - op->cmd); + etnaviv_set_source_bo(etnaviv, &op->src); + etnaviv_set_dest_bo(etnaviv, &op->dst, op->cmd); etnaviv_set_blend(etnaviv, op->blend_op); if (op->brush) etnaviv_emit_brush(etnaviv, op->fg_colour); @@ -170,14 +168,11 @@ void etnaviv_de_start(struct etnaviv *etnaviv, const struct etnaviv_de_op *op) void etnaviv_de_end(struct etnaviv *etnaviv) { if (etnaviv->gc320_etna_bo) { - struct etnaviv_format fmt = { .format = DE_FORMAT_A1R5G5B5 }; - xPoint offset = { 0, -1 }; BoxRec box = { 0, 1, 1, 2 }; /* Append the GC320 workaround - 6 + 6 + 2 + 4 + 4 */ - etnaviv_set_source_bo(etnaviv, etnaviv->gc320_etna_bo, 64, - fmt, offset); - etnaviv_set_dest_bo(etnaviv, etnaviv->gc320_etna_bo, 64, fmt, + etnaviv_set_source_bo(etnaviv, &etnaviv->gc320_wa_src); + etnaviv_set_dest_bo(etnaviv, &etnaviv->gc320_wa_dst, VIVS_DE_DEST_CONFIG_COMMAND_BIT_BLT); etnaviv_set_blend(etnaviv, NULL); etnaviv_emit_rop_clip(etnaviv, 0xcc, 0xcc, &box, ZERO_OFFSET); @@ -279,8 +274,7 @@ void etnaviv_vr_op(struct etnaviv *etnaviv, struct etnaviv_vr_op *op, EMIT_ALIGN(etnaviv); } - etnaviv_set_dest_bo(etnaviv, op->dst.bo, op->dst.pitch, op->dst.format, - op->cmd); + etnaviv_set_dest_bo(etnaviv, &op->dst, op->cmd); EMIT_LOADSTATE(etnaviv, VIVS_DE_ALPHA_CONTROL, 1); EMIT(etnaviv, VIVS_DE_ALPHA_CONTROL_ENABLE_OFF); |