iris: resolve before transfer maps
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 8 Dec 2018 19:40:25 +0000 (11:40 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:12 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_resource.c
src/gallium/drivers/iris/iris_resource.h

index 349e4efe02227f84e5ec85cdfc82ee4ef04243ca..c40b3e6575c33d4e96dc8f441f0d639cc90671b1 100644 (file)
@@ -1061,6 +1061,12 @@ iris_transfer_map(struct pipe_context *ctx,
        (usage & PIPE_TRANSFER_MAP_DIRECTLY))
       return NULL;
 
+   if (resource->target != PIPE_BUFFER) {
+      iris_resource_access_raw(ice, &ice->batches[IRIS_BATCH_RENDER], res,
+                               level, box->z, box->depth,
+                               usage & PIPE_TRANSFER_WRITE);
+   }
+
    if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) {
       for (int i = 0; i < IRIS_BATCH_COUNT; i++) {
          if (iris_batch_references(&ice->batches[i], res->bo))
index c31f70ba058ecab3696e8a9c1be38107f4bf3ab1..8e57b861437b3d11a3868839c6c43b83db88ab89 100644 (file)
@@ -298,12 +298,15 @@ iris_resource_access_raw(struct iris_context *ice,
                          struct iris_batch *batch,
                          struct iris_resource *res,
                          uint32_t level, uint32_t layer,
+                         uint32_t num_layers,
                          bool write)
 {
-   iris_resource_prepare_access(ice, batch, res, level, 1, layer, 1,
+   iris_resource_prepare_access(ice, batch, res, level, 1, layer, num_layers,
                                 ISL_AUX_USAGE_NONE, false);
-   if (write)
-      iris_resource_finish_write(ice, res, level, layer, 1, ISL_AUX_USAGE_NONE);
+   if (write) {
+      iris_resource_finish_write(ice, res, level, layer, num_layers,
+                                 ISL_AUX_USAGE_NONE);
+   }
 }
 
 enum isl_aux_usage iris_resource_texture_aux_usage(struct iris_context *ice,