Revert "swr/rast: Archrast codegen updates"
[mesa.git] / src / gallium / drivers / virgl / virgl_buffer.c
index e46c9f504fd378984154c9bec6cf59b03690178a..c500b1c297a92a47f1509ed7cbb11d55d807b533 100644 (file)
@@ -42,17 +42,16 @@ static void *virgl_buffer_transfer_map(struct pipe_context *ctx,
    bool readback;
    bool doflushwait = false;
 
+   trans = virgl_resource_create_transfer(&vctx->transfer_pool, resource,
+                                          &vbuf->metadata, level, usage, box);
    if (usage & PIPE_TRANSFER_READ)
       doflushwait = true;
    else
-      doflushwait = virgl_res_needs_flush_wait(vctx, vbuf, usage);
+      doflushwait = virgl_res_needs_flush_wait(vctx, trans);
 
    if (doflushwait)
       ctx->flush(ctx, NULL, 0);
 
-   trans = virgl_resource_create_transfer(&vctx->transfer_pool, resource,
-                                          &vbuf->metadata, level, usage, box);
-
    readback = virgl_res_needs_readback(vctx, vbuf, usage, 0);
    if (readback)
       vs->vws->transfer_get(vs->vws, vbuf->hw_res, box, trans->base.stride,
@@ -84,8 +83,10 @@ static void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
    if (trans->base.usage & PIPE_TRANSFER_WRITE) {
       struct virgl_screen *vs = virgl_screen(ctx->screen);
       if (transfer->usage & PIPE_TRANSFER_FLUSH_EXPLICIT) {
-         if (trans->range.end <= trans->range.start)
-            goto out;
+         if (trans->range.end <= trans->range.start) {
+            virgl_resource_destroy_transfer(&vctx->transfer_pool, trans);
+            return;
+         }
 
          transfer->box.x += trans->range.start;
          transfer->box.width = trans->range.end - trans->range.start;
@@ -93,21 +94,15 @@ static void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
       }
 
       vctx->num_transfers++;
-      vs->vws->transfer_put(vs->vws, vbuf->hw_res,
-                            &transfer->box, trans->base.stride,
-                            trans->l_stride, trans->offset,
-                            transfer->level);
-
+      virgl_transfer_queue_unmap(&vctx->queue, trans);
    }
-
-out:
-   virgl_resource_destroy_transfer(&vctx->transfer_pool, trans);
 }
 
 static void virgl_buffer_transfer_flush_region(struct pipe_context *ctx,
                                                struct pipe_transfer *transfer,
                                                const struct pipe_box *box)
 {
+   struct virgl_context *vctx = virgl_context(ctx);
    struct virgl_resource *vbuf = virgl_resource(transfer->resource);
    struct virgl_transfer *trans = virgl_transfer(transfer);