summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Gmeiner <christian.gmeiner@gmail.com>2014-02-01 09:14:19 +0000
committerChristian Gmeiner <christian.gmeiner@gmail.com>2014-02-08 09:24:30 +0000
commit0e9a253c56fd04e39c141ed58c99d65465f16298 (patch)
tree0bd1970d2cbfcbb886683875d7aef4efef1b09e6
parent57a08413f36d8a0711cf25d01ae0a7eafea86361 (diff)
rs: make use of xxx_tiling to determine multi pipe usage
We can detect via source and dest tiling if we need to use multi pipes. So we can get rid of the extra tow mutli variables in rs_state. Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
-rw-r--r--src/etnaviv/etna_rs.c13
-rw-r--r--src/etnaviv/etna_rs.h2
2 files changed, 9 insertions, 6 deletions
diff --git a/src/etnaviv/etna_rs.c b/src/etnaviv/etna_rs.c
index dd6b1dc..8716992 100644
--- a/src/etnaviv/etna_rs.c
+++ b/src/etnaviv/etna_rs.c
@@ -57,6 +57,11 @@ void etna_compile_rs_state(struct etna_ctx *restrict ctx, struct compiled_rs_sta
/* TILED and SUPERTILED layout have their strides multiplied with 4 in RS */
unsigned source_stride_shift = (rs->source_tiling != ETNA_LAYOUT_LINEAR) ? 2 : 0;
unsigned dest_stride_shift = (rs->dest_tiling != ETNA_LAYOUT_LINEAR) ? 2 : 0;
+
+ /* tiling == ETNA_LAYOUT_MULTI_TILED or ETNA_LAYOUT_MULTI_SUPERTILED? */
+ bool source_multi = (rs->source_tiling & 0x4)?true:false;
+ bool dest_multi = (rs->dest_tiling & 0x4)?true:false;
+
/* TODO could just pre-generate command buffer, would simply submit to one memcpy */
SET_STATE(RS_CONFIG, VIVS_RS_CONFIG_SOURCE_FORMAT(rs->source_format) |
(rs->downsample_x?VIVS_RS_CONFIG_DOWNSAMPLE_X:0) |
@@ -70,23 +75,23 @@ void etna_compile_rs_state(struct etna_ctx *restrict ctx, struct compiled_rs_sta
SET_STATE(RS_PIPE_SOURCE_ADDR[0], rs->source_addr);
SET_STATE(RS_SOURCE_STRIDE, (rs->source_stride << source_stride_shift) |
((rs->source_tiling&2)?VIVS_RS_SOURCE_STRIDE_TILING:0) |
- ((rs->source_multi)?VIVS_RS_SOURCE_STRIDE_MULTI:0));
+ ((source_multi)?VIVS_RS_SOURCE_STRIDE_MULTI:0));
SET_STATE(RS_DEST_ADDR, rs->dest_addr);
SET_STATE(RS_PIPE_DEST_ADDR[0], rs->dest_addr);
SET_STATE(RS_DEST_STRIDE, (rs->dest_stride << dest_stride_shift) |
((rs->dest_tiling&2)?VIVS_RS_DEST_STRIDE_TILING:0) |
- ((rs->dest_multi)?VIVS_RS_DEST_STRIDE_MULTI:0));
+ ((dest_multi)?VIVS_RS_DEST_STRIDE_MULTI:0));
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)
{
- if (rs->source_multi)
+ if (source_multi)
{
SET_STATE(RS_PIPE_SOURCE_ADDR[1], rs->source_addr); /* TODO */
}
- if (rs->dest_multi)
+ if (dest_multi)
{
SET_STATE(RS_PIPE_DEST_ADDR[1], rs->dest_addr); /* TODO */
}
diff --git a/src/etnaviv/etna_rs.h b/src/etnaviv/etna_rs.h
index 403823f..b660a10 100644
--- a/src/etnaviv/etna_rs.h
+++ b/src/etnaviv/etna_rs.h
@@ -29,8 +29,6 @@ struct rs_state
{
uint8_t downsample_x:1; // Downsample in x direction
uint8_t downsample_y:1; // Downsample in y direction
- uint8_t source_multi:1;
- uint8_t dest_multi:1;
uint8_t source_format; // RS_FORMAT_XXX
uint8_t source_tiling; // ETNA_LAYOUT_XXX