The series is

Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>

On 09.02.2017 12:21, Marek Olšák wrote:
From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeon/r600_texture.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_texture.c 
b/src/gallium/drivers/radeon/r600_texture.c
index 55c8e6f..5d84eb4 100644
--- a/src/gallium/drivers/radeon/r600_texture.c
+++ b/src/gallium/drivers/radeon/r600_texture.c
@@ -1449,31 +1449,32 @@ static void *r600_texture_transfer_map(struct 
pipe_context *ctx,
                                r600_can_invalidate_texture(rctx->screen, rtex,
                                                            usage, box);

                        r600_degrade_tile_mode_to_linear(rctx, rtex,
                                                         can_invalidate);
                }

                /* Tiled textures need to be converted into a linear texture 
for CPU
                 * access. The staging texture is always linear and is placed 
in GART.
                 *
-                * Reading from VRAM is slow, always use the staging texture in
-                * this case.
+                * Reading from VRAM or GTT WC is slow, always use the staging
+                * texture in this case.
                 *
                 * Use the staging texture for uploads if the underlying BO
                 * is busy.
                 */
                if (!rtex->surface.is_linear)
                        use_staging_texture = true;
                else if (usage & PIPE_TRANSFER_READ)
-                       use_staging_texture = (rtex->resource.domains &
-                                              RADEON_DOMAIN_VRAM) != 0;
+                       use_staging_texture =
+                               rtex->resource.domains & RADEON_DOMAIN_VRAM ||
+                               rtex->resource.flags & RADEON_FLAG_GTT_WC;
                /* Write & linear only: */
                else if (r600_rings_is_buffer_referenced(rctx, 
rtex->resource.buf,
                                                         
RADEON_USAGE_READWRITE) ||
                         !rctx->ws->buffer_wait(rtex->resource.buf, 0,
                                                RADEON_USAGE_READWRITE)) {
                        /* It's busy. */
                        if (r600_can_invalidate_texture(rctx->screen, rtex,
                                                        usage, box))
                                r600_texture_invalidate_storage(rctx, rtex);
                        else


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to