diff options
Diffstat (limited to 'src/gallium/drivers/etna/etna_screen.c')
-rw-r--r-- | src/gallium/drivers/etna/etna_screen.c | 24 |
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, ©_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 * |