summaryrefslogtreecommitdiff
path: root/src/driver/etna_resource.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/driver/etna_resource.c')
-rw-r--r--src/driver/etna_resource.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/driver/etna_resource.c b/src/driver/etna_resource.c
index 4782804..4389a2f 100644
--- a/src/driver/etna_resource.c
+++ b/src/driver/etna_resource.c
@@ -146,7 +146,15 @@ static struct pipe_resource * etna_screen_resource_create(struct pipe_screen *sc
else
layout = ETNA_LAYOUT_TILED;
}
- /* XXX multi tiled formats */
+
+ /* multi tiled formats */
+ if (priv->dev->chip.pixel_pipes > 1)
+ {
+ if (layout == ETNA_LAYOUT_TILED)
+ layout = ETNA_LAYOUT_MULTI_TILED;
+ if (layout == ETNA_LAYOUT_SUPER_TILED)
+ layout = ETNA_LAYOUT_MULTI_SUPERTILED;
+ }
/* Determine scaling for antialiasing, allow override using debug flag */
int nr_samples = templat->nr_samples;
@@ -237,6 +245,10 @@ static struct pipe_resource * etna_screen_resource_create(struct pipe_screen *sc
resource->ts_bo = 0; /* TS is only created when first bound to surface */
pipe_reference_init(&resource->base.reference, 1);
+ /* calculate pipe addresses */
+ resource->pipe_addr[0] = etna_bo_gpu_address(resource->bo) + resource->levels[0].offset;
+ resource->pipe_addr[1] = etna_bo_gpu_address(resource->bo) + resource->levels[0].offset + (resource->levels[0].size / 2);
+
if(DBG_ENABLED(ETNA_DBG_ZERO))
{
void *map = etna_bo_map(bo);