Mesa (master): r600g: properly check whether texture is busy in get_transfer
Marek Olšák
mareko at kemper.freedesktop.org
Mon Feb 27 01:04:42 UTC 2012
Module: Mesa
Branch: master
Commit: 81c04848625182c51d89c91f34ea6ab51d9ed090
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=81c04848625182c51d89c91f34ea6ab51d9ed090
Author: Marek Olšák <maraeo at gmail.com>
Date: Fri Feb 24 17:14:59 2012 +0100
r600g: properly check whether texture is busy in get_transfer
---
src/gallium/drivers/r600/r600_texture.c | 14 +++++---------
1 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c
index 75cceb2..90edabb 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -792,6 +792,7 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
unsigned usage,
const struct pipe_box *box)
{
+ struct r600_context *rctx = (struct r600_context*)ctx;
struct r600_resource_texture *rtex = (struct r600_resource_texture*)texture;
struct pipe_resource resource;
struct r600_transfer *trans;
@@ -815,15 +816,10 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
if ((usage & PIPE_TRANSFER_READ) && u_box_volume(box) > 1024)
use_staging_texture = TRUE;
- /* XXX: Use a staging texture for uploads if the underlying BO
- * is busy. No interface for checking that currently? so do
- * it eagerly whenever the transfer doesn't require a readback
- * and might block.
- */
- if ((usage & PIPE_TRANSFER_WRITE) &&
- !(usage & (PIPE_TRANSFER_READ |
- PIPE_TRANSFER_DONTBLOCK |
- PIPE_TRANSFER_UNSYNCHRONIZED)))
+ /* Use a staging texture for uploads if the underlying BO is busy. */
+ if (!(usage & PIPE_TRANSFER_READ) &&
+ (rctx->ws->cs_is_buffer_referenced(rctx->cs, rtex->resource.cs_buf) ||
+ rctx->ws->buffer_is_busy(rtex->resource.buf, RADEON_USAGE_READWRITE)))
use_staging_texture = TRUE;
if (!permit_hardware_blit(ctx->screen, texture) ||
More information about the mesa-commit
mailing list