virgl: remove an incorrect check in virgl_res_needs_flush
Imagine this resource_copy_region(ctx, dst, ..., src, ...); transfer_map(ctx, src, 0, PIPE_TRANSFER_WRITE, ...); at the beginning of a cmdbuf. We need to flush in transfer_map so that the transfer is not reordered before the resource copy. The check for "vctx->num_draws == 0 && vctx->num_compute == 0" is not enough. Removing the optimization entirely. Because of the more precise resource tracking in the previous commit, I hope the performance impact is minimized. We will have to go with perfect resource tracking, or attempt a more limited optimization, if there are specific cases we really need to optimize for. Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
This commit is contained in:
@@ -32,8 +32,6 @@
|
|||||||
*
|
*
|
||||||
* - synchronization is disabled
|
* - synchronization is disabled
|
||||||
* - the resource is not referenced by the current cmdbuf
|
* - the resource is not referenced by the current cmdbuf
|
||||||
* - the current cmdbuf has no draw/compute command that accesses the
|
|
||||||
* resource (XXX there are also clear or blit commands)
|
|
||||||
*/
|
*/
|
||||||
static bool virgl_res_needs_flush(struct virgl_context *vctx,
|
static bool virgl_res_needs_flush(struct virgl_context *vctx,
|
||||||
struct virgl_transfer *trans)
|
struct virgl_transfer *trans)
|
||||||
@@ -47,19 +45,6 @@ static bool virgl_res_needs_flush(struct virgl_context *vctx,
|
|||||||
if (!vws->res_is_referenced(vws, vctx->cbuf, res->hw_res))
|
if (!vws->res_is_referenced(vws, vctx->cbuf, res->hw_res))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (res->clean_mask & (1 << trans->base.level)) {
|
|
||||||
/* XXX Consider
|
|
||||||
*
|
|
||||||
* glCopyBufferSubData(src, dst, ...);
|
|
||||||
* glBufferSubData(src, ...);
|
|
||||||
*
|
|
||||||
* at the beginning of a cmdbuf. glBufferSubData will be incorrectly
|
|
||||||
* reordered before glCopyBufferSubData.
|
|
||||||
*/
|
|
||||||
if (vctx->num_draws == 0 && vctx->num_compute == 0)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user