Revert "gallium: add flag PIPE_TRANSFER_MAP_PERMANENTLY"
authorMarek Olšák <maraeo@gmail.com>
Mon, 5 Mar 2012 12:45:00 +0000 (13:45 +0100)
committerMarek Olšák <maraeo@gmail.com>
Mon, 5 Mar 2012 12:47:49 +0000 (13:47 +0100)
This reverts commit 0950086376b1c8b7fb89eda81ed7f2f06dee58bc.

It was decided to refactor the transfer API instead of adding workarounds
to address the performance issues.

12 files changed:
src/gallium/drivers/i915/i915_resource_buffer.c
src/gallium/drivers/i915/i915_resource_texture.c
src/gallium/drivers/llvmpipe/lp_texture.c
src/gallium/drivers/nouveau/nouveau_buffer.c
src/gallium/drivers/nv50/nv50_transfer.c
src/gallium/drivers/nvc0/nvc0_transfer.c
src/gallium/drivers/nvfx/nvfx_transfer.c
src/gallium/drivers/r300/r300_transfer.c
src/gallium/drivers/r600/r600_texture.c
src/gallium/drivers/svga/svga_resource_buffer.c
src/gallium/drivers/svga/svga_resource_texture.c
src/gallium/include/pipe/p_defines.h

index c54e481698e5e0dd542e7d946ce50d6746910b3d..77c03450b3a24b81449838c82d2cca95a8e1bdcf 100644 (file)
@@ -68,13 +68,8 @@ i915_get_transfer(struct pipe_context *pipe,
                   const struct pipe_box *box)
 {
    struct i915_context *i915 = i915_context(pipe);
-   struct pipe_transfer *transfer;
+   struct pipe_transfer *transfer = util_slab_alloc(&i915->transfer_pool);
 
-   if (usage & PIPE_TRANSFER_MAP_PERMANENTLY) {
-      return NULL;
-   }
-
-   transfer = util_slab_alloc(&i915->transfer_pool);
    if (transfer == NULL)
       return NULL;
 
index 64d071c9d53c04e739a66e66296fbe5d81efffc6..8ff733a7be530f261d8fe3e54084fe1192a51449 100644 (file)
@@ -720,14 +720,9 @@ i915_texture_get_transfer(struct pipe_context *pipe,
 {
    struct i915_context *i915 = i915_context(pipe);
    struct i915_texture *tex = i915_texture(resource);
-   struct i915_transfer *transfer;
+   struct i915_transfer *transfer = util_slab_alloc(&i915->texture_transfer_pool);
    boolean use_staging_texture = FALSE;
 
-   if (usage & PIPE_TRANSFER_MAP_PERMANENTLY) {
-      return NULL;
-   }
-
-   transfer = util_slab_alloc(&i915->texture_transfer_pool);
    if (transfer == NULL)
       return NULL;
 
index e895485e9476264bcf25e03295aa92a8d4637fc8..28e5aa9a806b8f3c5df6ba53cc16ccca96f39163 100644 (file)
@@ -601,10 +601,6 @@ llvmpipe_get_transfer(struct pipe_context *pipe,
    assert(resource);
    assert(level <= resource->last_level);
 
-   if (usage & PIPE_TRANSFER_MAP_PERMANENTLY) {
-      return NULL;
-   }
-
    /*
     * Transfers, like other pipe operations, must happen in order, so flush the
     * context if necessary.
index 02186ba373938532b7c67123bcddaa09d2abedd6..f822625af9094977b7ceaba4810f98d09df0c256 100644 (file)
@@ -172,13 +172,7 @@ nouveau_buffer_transfer_get(struct pipe_context *pipe,
 {
    struct nv04_resource *buf = nv04_resource(resource);
    struct nouveau_context *nv = nouveau_context(pipe);
-   struct nouveau_transfer *xfr;
-
-   if (usage & PIPE_TRANSFER_MAP_PERMANENTLY) {
-      return NULL;
-   }
-
-   xfr = CALLOC_STRUCT(nouveau_transfer);
+   struct nouveau_transfer *xfr = CALLOC_STRUCT(nouveau_transfer);
    if (!xfr)
       return NULL;
 
index 8ddebeb7451f5fb1a6dc428c201ed1ad0d9944ff..6f860e7334863639c92e96cfc766ba07c9404658 100644 (file)
@@ -243,7 +243,7 @@ nv50_miptree_transfer_new(struct pipe_context *pctx,
    uint32_t size;
    int ret;
 
-   if (usage & (PIPE_TRANSFER_MAP_DIRECTLY | PIPE_TRANSFER_MAP_PERMANENTLY))
+   if (usage & PIPE_TRANSFER_MAP_DIRECTLY)
       return NULL;
 
    tx = CALLOC_STRUCT(nv50_transfer);
index c04f41f6ea38b7bfbfece21723520d1e3c61d2b2..f16863733b7c907dffc59e060ca4b76fbd9c698f 100644 (file)
@@ -243,7 +243,7 @@ nvc0_miptree_transfer_new(struct pipe_context *pctx,
    uint32_t size;
    int ret;
 
-   if (usage & (PIPE_TRANSFER_MAP_DIRECTLY | PIPE_TRANSFER_MAP_PERMANENTLY))
+   if (usage & PIPE_TRANSFER_MAP_DIRECTLY)
       return NULL;
 
    tx = CALLOC_STRUCT(nvc0_transfer);
index 605af8efa8ea4230609031e65a1b6d128cf8281f..7a218b18c6404a636be51181ef921b329d21faa3 100644 (file)
@@ -26,9 +26,6 @@ nvfx_transfer_new(struct pipe_context *pipe,
                  unsigned usage,
                  const struct pipe_box *box)
 {
-        if (usage & PIPE_TRANSFER_MAP_PERMANENTLY) {
-                return NULL;
-        }
         if((usage & (PIPE_TRANSFER_UNSYNCHRONIZED | PIPE_TRANSFER_DONTBLOCK)) == PIPE_TRANSFER_DONTBLOCK)
         {
                 struct nouveau_bo* bo = ((struct nvfx_resource*)pt)->bo;
index ada094bcb59630c713a3f01ec15f57f694e22f62..5e99cc467a861ac89d9e18a1a884c1e9908951f5 100644 (file)
@@ -89,10 +89,6 @@ r300_texture_get_transfer(struct pipe_context *ctx,
     struct pipe_resource base;
     boolean referenced_cs, referenced_hw;
 
-    if (usage & (PIPE_TRANSFER_MAP_DIRECTLY | PIPE_TRANSFER_MAP_PERMANENTLY)) {
-        return NULL;
-    }
-
     referenced_cs =
         r300->rws->cs_is_buffer_referenced(r300->cs, tex->cs_buf);
     if (referenced_cs) {
index 2b69fcd92f76a4aaa633ce9eeeeb3fefdb9eed5f..a5a94d4aee6e22db42b3eda4598e045fbd73773e 100644 (file)
@@ -790,10 +790,6 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,
        int r;
        boolean use_staging_texture = FALSE;
 
-       if (usage & PIPE_TRANSFER_MAP_PERMANENTLY) {
-          return NULL;
-       }
-
        /* We cannot map a tiled texture directly because the data is
         * in a different order, therefore we do detiling using a blit.
         *
index 57ec752bf9b129fcbd29ada8699f74e77c125fe5..fa713ee88adda16c864983942dcfee6276e6faf1 100644 (file)
@@ -74,10 +74,6 @@ svga_buffer_get_transfer(struct pipe_context *pipe,
    struct svga_buffer *sbuf = svga_buffer(resource);
    struct pipe_transfer *transfer;
 
-   if (usage & PIPE_TRANSFER_MAP_PERMANENTLY) {
-      return NULL;
-   }
-
    transfer = CALLOC_STRUCT(pipe_transfer);
    if (transfer == NULL) {
       return NULL;
index c5b830660f57745788e09b40f4d8d2944e5c27d1..9830e79d1060109e6223b783abac10bb4a3421b5 100644 (file)
@@ -251,7 +251,7 @@ svga_texture_get_transfer(struct pipe_context *pipe,
    unsigned nblocksy = util_format_get_nblocksy(texture->format, box->height);
 
    /* We can't map texture storage directly */
-   if (usage & (PIPE_TRANSFER_MAP_DIRECTLY | PIPE_TRANSFER_MAP_PERMANENTLY))
+   if (usage & PIPE_TRANSFER_MAP_DIRECTLY)
       return NULL;
 
    assert(box->depth == 1);
index ff6c07dddd03b37b13f24b4b059d1910094d0823..889fc9961f4388b3f9c9015a685af798301d3038 100644 (file)
@@ -225,22 +225,6 @@ enum pipe_transfer_usage {
     */
    PIPE_TRANSFER_MAP_DIRECTLY = (1 << 2),
 
-   /**
-    * The transfer should map the resource storage directly and the GPU should
-    * be able to see what the CPU has written. Such a storage may stay mapped
-    * while issuing draw commands which use it. The only allowed usage is
-    * non-overlapping writes which are suballocated out of a big buffer.
-    * The minimum allowed alignment of suballocations is 256 bytes (this is
-    * a subject to change).
-    * The flag is intended to be used to avoid mapping and unmapping
-    * resources repeatedly when doing uploads and draws intermixed.
-    *
-    * The driver may return NULL if that isn't possible, and the state
-    * tracker needs to cope with that and use an alternative path
-    * without this flag.
-    */
-   PIPE_TRANSFER_MAP_PERMANENTLY = (1 << 3),
-
    /**
     * Discards the memory within the mapped region.
     *