summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/etna/etna_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/etna/etna_screen.c')
-rw-r--r--src/gallium/drivers/etna/etna_screen.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/gallium/drivers/etna/etna_screen.c b/src/gallium/drivers/etna/etna_screen.c
index a3c8ed375c..591596a37e 100644
--- a/src/gallium/drivers/etna/etna_screen.c
+++ b/src/gallium/drivers/etna/etna_screen.c
@@ -432,16 +432,13 @@ static void etna_screen_flush_frontbuffer( struct pipe_screen *screen,
void *winsys_drawable_handle,
struct pipe_box *subbox)
{
- struct etna_rs_target *drawable = (struct etna_rs_target *)winsys_drawable_handle;
+ struct etna_resource *drawable = winsys_drawable_handle;
struct etna_resource *rt_resource = etna_resource(resource);
struct etna_pipe_context *ectx = rt_resource->last_ctx;
assert(level <= resource->last_level && layer < resource->array_size);
assert(ectx);
struct etna_ctx *ctx = ectx->ctx;
- /* release previous fence, make reference to fence if we need one */
- screen->fence_reference(screen, &drawable->fence, NULL);
-
etna_set_state(ctx, VIVS_GL_FLUSH_CACHE, VIVS_GL_FLUSH_CACHE_COLOR);
etna_stall(ctx, SYNC_RECIPIENT_RA, SYNC_RECIPIENT_PE);
@@ -475,25 +472,26 @@ static void etna_screen_flush_frontbuffer( struct pipe_screen *screen,
.source_addr[0] = etna_get_level_pipe_addr(rt_resource, level, 0),
.source_addr[1] = etna_get_level_pipe_addr(rt_resource, level, 1),
.source_stride = rt_resource->levels[level].stride,
- .dest_format = drawable->rs_format,
- .dest_tiling = ETNA_LAYOUT_LINEAR,
+ .dest_format = translate_rt_format(drawable->base.format, false),
+ .dest_tiling = drawable->layout,
.dest_addr[0] = etna_bo_gpu_address(drawable->bo),
- .dest_stride = drawable->stride,
+ .dest_stride = drawable->levels[0].stride,
.downsample_x = msaa_xscale > 1,
.downsample_y = msaa_yscale > 1,
- .swap_rb = drawable->swap_rb,
+ .swap_rb = translate_rb_src_dst_swap(rt_resource->base.format,
+ drawable->base.format),
.dither = {0xffffffff, 0xffffffff}, // XXX dither when going from 24 to 16 bit?
.clear_mode = VIVS_RS_CLEAR_CONTROL_MODE_DISABLED,
- .width = drawable->width * msaa_xscale,
- .height = drawable->height * msaa_yscale
+ .width = drawable->levels[0].width * msaa_xscale,
+ .height = drawable->levels[0].height * msaa_yscale
});
etna_submit_rs_state(ctx, &copy_to_screen);
DBG_F(ETNA_DBG_FRAME_MSGS,
"Queued RS command to flush screen from %08x to %08x stride=%08x width=%i height=%i, ctx %p",
etna_bo_gpu_address(rt_resource->bo) + rt_resource->levels[level].offset,
- etna_bo_gpu_address(drawable->bo), drawable->stride,
- drawable->width, drawable->height, ctx);
- ectx->base.flush(&ectx->base, &drawable->fence, 0);
+ etna_bo_gpu_address(drawable->bo), drawable->levels[0].stride,
+ drawable->levels[0].width, drawable->levels[0].height, ctx);
+ ectx->base.flush(&ectx->base, NULL, 0);
}
struct pipe_screen *