From: Chia-I Wu Date: Fri, 10 May 2019 03:40:41 +0000 (-0700) Subject: virgl: clean up virgl_res_needs_readback X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a62ab178cecadae8ead16c0910707c2218e856e7;p=mesa.git virgl: clean up virgl_res_needs_readback Add comments and follow the coding style of virgl_res_needs_flush. Signed-off-by: Chia-I Wu Reviewed-by: Alexandros Frantzis --- diff --git a/src/gallium/drivers/virgl/virgl_resource.c b/src/gallium/drivers/virgl/virgl_resource.c index 83918f85216..52197b80175 100644 --- a/src/gallium/drivers/virgl/virgl_resource.c +++ b/src/gallium/drivers/virgl/virgl_resource.c @@ -79,16 +79,27 @@ bool virgl_res_needs_flush(struct virgl_context *vctx, return true; } +/* We need to read back from the host storage to make sure the guest storage + * is up-to-date. But there are cases where the readback can be skipped: + * + * - the content can be discarded + * - the host storage is read-only + * + * Note that PIPE_TRANSFER_WRITE without discard bits requires readback. + * PIPE_TRANSFER_READ becomes irrelevant. PIPE_TRANSFER_UNSYNCHRONIZED and + * PIPE_TRANSFER_FLUSH_EXPLICIT are also irrelevant. + */ bool virgl_res_needs_readback(struct virgl_context *vctx, struct virgl_resource *res, unsigned usage, unsigned level) { - bool readback = true; + if (usage & PIPE_TRANSFER_DISCARD_RANGE) + return false; + if (res->clean_mask & (1 << level)) - readback = false; - else if (usage & PIPE_TRANSFER_DISCARD_RANGE) - readback = false; - return readback; + return false; + + return true; } static struct pipe_resource *virgl_resource_create(struct pipe_screen *screen,