summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk@arm.linux.org.uk>2015-06-01 12:28:13 +0100
committerRussell King <rmk@arm.linux.org.uk>2015-06-29 12:58:33 +0100
commitb59f72c890fc8ac82b620d6e0ff38ce399abe7ad (patch)
tree175dcb5b3582dd608eba4358f194eb0fa78afc12
parent9be28a238209b2a0f91c86804627d2c2c34889fd (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.c11
-rw-r--r--etnaviv/etnaviv_accel.h2
-rw-r--r--etnaviv/etnaviv_op.c44
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);