summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Gmeiner <christian.gmeiner@gmail.com>2013-11-06 17:13:17 +0000
committerChristian Gmeiner <christian.gmeiner@gmail.com>2013-11-06 17:13:17 +0000
commit33d3141a288b5f30c32f3f7f0da6d6cb358ec3b4 (patch)
tree6cc006661452fc8b76e5ec3e34a6b702a5050477 /src
parent4ef20b1c0b0508085135737b90d7b178b28eaff7 (diff)
downloadetna_viv-33d3141a288b5f30c32f3f7f0da6d6cb358ec3b4.tar.gz
etna_viv-33d3141a288b5f30c32f3f7f0da6d6cb358ec3b4.tar.xz
rs: do computation of RS_WINDOW_SIZE in etna_compile_rs_state
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/etnaviv/etna_rs.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/etnaviv/etna_rs.c b/src/etnaviv/etna_rs.c
index d716543..873bd59 100644
--- a/src/etnaviv/etna_rs.c
+++ b/src/etnaviv/etna_rs.c
@@ -74,7 +74,14 @@ void etna_compile_rs_state(struct etna_ctx *restrict ctx, struct compiled_rs_sta
SET_STATE(RS_PIPE_DEST_ADDR[0], rs->dest_addr);
SET_STATE(RS_PIPE_DEST_ADDR[1], rs->dest_addr); /* TODO */
SET_STATE(RS_DEST_STRIDE, (rs->dest_stride << dest_stride_shift) | ((rs->dest_tiling&2)?VIVS_RS_DEST_STRIDE_TILING:0));
- SET_STATE(RS_WINDOW_SIZE, VIVS_RS_WINDOW_SIZE_WIDTH(rs->width) | VIVS_RS_WINDOW_SIZE_HEIGHT(rs->height));
+ if (ctx->conn->chip.pixel_pipes == 1)
+ {
+ SET_STATE(RS_WINDOW_SIZE, VIVS_RS_WINDOW_SIZE_WIDTH(rs->width) | VIVS_RS_WINDOW_SIZE_HEIGHT(rs->height));
+ }
+ else if (ctx->conn->chip.pixel_pipes == 2)
+ {
+ SET_STATE(RS_WINDOW_SIZE, VIVS_RS_WINDOW_SIZE_WIDTH(rs->width) | VIVS_RS_WINDOW_SIZE_HEIGHT(rs->height / 2));
+ }
SET_STATE(RS_PIPE_OFFSET[0], VIVS_RS_PIPE_OFFSET_X(0) | VIVS_RS_PIPE_OFFSET_Y(0));
SET_STATE(RS_PIPE_OFFSET[1], VIVS_RS_PIPE_OFFSET_X(rs->width) | VIVS_RS_PIPE_OFFSET_Y(rs->height / 2));
SET_STATE(RS_DITHER[0], rs->dither[0]);
@@ -119,12 +126,6 @@ void etna_submit_rs_state(struct etna_ctx *restrict ctx, const struct compiled_r
}
else if (ctx->conn->chip.pixel_pipes == 2)
{
- /* we need to change window size value */
- uint32_t window_size = cs->RS_WINDOW_SIZE;
- uint32_t h = (window_size & VIVS_RS_WINDOW_SIZE_HEIGHT__MASK) >> VIVS_RS_WINDOW_SIZE_HEIGHT__SHIFT;
- uint32_t w = (window_size & VIVS_RS_WINDOW_SIZE_WIDTH__MASK) >> VIVS_RS_WINDOW_SIZE_WIDTH__SHIFT;
- window_size = VIVS_RS_WINDOW_SIZE_WIDTH(w) | VIVS_RS_WINDOW_SIZE_HEIGHT(h / 2);
-
etna_reserve(ctx, 32);
/*0 */ ETNA_EMIT_LOAD_STATE(ctx, VIVS_RS_CONFIG>>2, 5, 0);
/*1 */ ETNA_EMIT(ctx, cs->RS_CONFIG);
@@ -143,7 +144,7 @@ void etna_submit_rs_state(struct etna_ctx *restrict ctx, const struct compiled_r
/*14*/ ETNA_EMIT(ctx, cs->RS_PIPE_OFFSET[1]);
/*15*/ ETNA_EMIT(ctx, 0x00000000); /* pad */
/*16*/ ETNA_EMIT_LOAD_STATE(ctx, VIVS_RS_WINDOW_SIZE>>2, 1, 0);
- /*17*/ ETNA_EMIT(ctx, window_size);
+ /*17*/ ETNA_EMIT(ctx, cs->RS_WINDOW_SIZE);
/*18*/ ETNA_EMIT_LOAD_STATE(ctx, VIVS_RS_DITHER(0)>>2, 2, 0);
/*19*/ ETNA_EMIT(ctx, cs->RS_DITHER[0]);
/*20*/ ETNA_EMIT(ctx, cs->RS_DITHER[1]);