[Mesa-dev] [PATCH] gallium: remove PIPE_BIND_TRANSFER_READ/WRITE

Marek Olšák maraeo at gmail.com
Wed Sep 7 19:37:58 UTC 2016


From: Marek Olšák <marek.olsak at amd.com>

not used in any useful way
---
 src/gallium/auxiliary/util/u_debug.c                | 2 --
 src/gallium/docs/source/screen.rst                  | 2 --
 src/gallium/drivers/freedreno/a2xx/fd2_screen.c     | 5 -----
 src/gallium/drivers/freedreno/a3xx/fd3_screen.c     | 5 -----
 src/gallium/drivers/freedreno/a4xx/fd4_screen.c     | 5 -----
 src/gallium/drivers/ilo/ilo_resource.c              | 2 +-
 src/gallium/drivers/ilo/ilo_transfer.c              | 3 +--
 src/gallium/drivers/nouveau/nv30/nv30_screen.c      | 6 ++----
 src/gallium/drivers/nouveau/nv50/nv50_screen.c      | 6 ++----
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c      | 4 +---
 src/gallium/drivers/r300/r300_screen.c              | 6 ------
 src/gallium/drivers/r600/evergreen_state.c          | 5 -----
 src/gallium/drivers/r600/r600_state.c               | 5 -----
 src/gallium/drivers/radeon/r600_buffer_common.c     | 2 +-
 src/gallium/drivers/radeonsi/si_state.c             | 5 -----
 src/gallium/drivers/vc4/vc4_screen.c                | 5 -----
 src/gallium/include/pipe/p_defines.h                | 3 +--
 src/gallium/state_trackers/clover/core/format.cpp   | 4 +---
 src/gallium/state_trackers/clover/core/resource.cpp | 4 +---
 src/gallium/state_trackers/nine/adapter9.c          | 3 +--
 src/gallium/state_trackers/nine/buffer9.c           | 2 +-
 src/gallium/state_trackers/nine/cubetexture9.c      | 3 ---
 src/gallium/state_trackers/nine/device9.c           | 2 +-
 src/gallium/state_trackers/nine/nine_pipe.h         | 3 +--
 src/gallium/state_trackers/nine/swapchain9.c        | 6 ++----
 src/gallium/state_trackers/nine/texture9.c          | 3 ---
 src/gallium/state_trackers/nine/volumetexture9.c    | 3 ---
 src/mesa/state_tracker/st_cb_readpixels.c           | 7 +++----
 src/mesa/state_tracker/st_cb_texture.c              | 6 +++---
 29 files changed, 23 insertions(+), 94 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_debug.c b/src/gallium/auxiliary/util/u_debug.c
index 3a94b75..4619526 100644
--- a/src/gallium/auxiliary/util/u_debug.c
+++ b/src/gallium/auxiliary/util/u_debug.c
@@ -519,22 +519,20 @@ debug_print_bind_flags(const char *msg, unsigned usage)
 {
    static const struct debug_named_value names[] = {
       DEBUG_NAMED_VALUE(PIPE_BIND_DEPTH_STENCIL),
       DEBUG_NAMED_VALUE(PIPE_BIND_RENDER_TARGET),
       DEBUG_NAMED_VALUE(PIPE_BIND_BLENDABLE),
       DEBUG_NAMED_VALUE(PIPE_BIND_SAMPLER_VIEW),
       DEBUG_NAMED_VALUE(PIPE_BIND_VERTEX_BUFFER),
       DEBUG_NAMED_VALUE(PIPE_BIND_INDEX_BUFFER),
       DEBUG_NAMED_VALUE(PIPE_BIND_CONSTANT_BUFFER),
       DEBUG_NAMED_VALUE(PIPE_BIND_DISPLAY_TARGET),
-      DEBUG_NAMED_VALUE(PIPE_BIND_TRANSFER_WRITE),
-      DEBUG_NAMED_VALUE(PIPE_BIND_TRANSFER_READ),
       DEBUG_NAMED_VALUE(PIPE_BIND_STREAM_OUTPUT),
       DEBUG_NAMED_VALUE(PIPE_BIND_CURSOR),
       DEBUG_NAMED_VALUE(PIPE_BIND_CUSTOM),
       DEBUG_NAMED_VALUE(PIPE_BIND_GLOBAL),
       DEBUG_NAMED_VALUE(PIPE_BIND_SHADER_BUFFER),
       DEBUG_NAMED_VALUE(PIPE_BIND_SHADER_IMAGE),
       DEBUG_NAMED_VALUE(PIPE_BIND_COMPUTE_RESOURCE),
       DEBUG_NAMED_VALUE(PIPE_BIND_COMMAND_ARGS_BUFFER),
       DEBUG_NAMED_VALUE(PIPE_BIND_SCANOUT),
       DEBUG_NAMED_VALUE(PIPE_BIND_SHARED),
diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst
index 5a11e72..5dff650 100644
--- a/src/gallium/docs/source/screen.rst
+++ b/src/gallium/docs/source/screen.rst
@@ -522,22 +522,20 @@ resources might be created and handled quite differently.
   If this flag is set, surface creation may fail if blending is not supported
   for the specified format. If it is not set, a driver may choose to ignore
   blending on surfaces with formats that would require emulation.
 * ``PIPE_BIND_DISPLAY_TARGET``: A surface that can be presented to screen. Arguments to
   pipe_screen::flush_front_buffer must have this flag set.
 * ``PIPE_BIND_SAMPLER_VIEW``: A texture that may be sampled from in a fragment
   or vertex shader.
 * ``PIPE_BIND_VERTEX_BUFFER``: A vertex buffer.
 * ``PIPE_BIND_INDEX_BUFFER``: An vertex index/element buffer.
 * ``PIPE_BIND_CONSTANT_BUFFER``: A buffer of shader constants.
-* ``PIPE_BIND_TRANSFER_WRITE``: A transfer object which will be written to.
-* ``PIPE_BIND_TRANSFER_READ``: A transfer object which will be read from.
 * ``PIPE_BIND_STREAM_OUTPUT``: A stream output buffer.
 * ``PIPE_BIND_CUSTOM``:
 * ``PIPE_BIND_SCANOUT``: A front color buffer or scanout buffer.
 * ``PIPE_BIND_SHARED``: A sharable buffer that can be given to another
   process.
 * ``PIPE_BIND_GLOBAL``: A buffer that can be mapped into the global
   address space of a compute program.
 * ``PIPE_BIND_SHADER_BUFFER``: A buffer without a format that can be bound
   to a shader and can be used with load, store, and atomic instructions.
 * ``PIPE_BIND_SHADER_IMAGE``: A buffer or texture with a format that can be
diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_screen.c b/src/gallium/drivers/freedreno/a2xx/fd2_screen.c
index 007b9e6..12ab5b4 100644
--- a/src/gallium/drivers/freedreno/a2xx/fd2_screen.c
+++ b/src/gallium/drivers/freedreno/a2xx/fd2_screen.c
@@ -80,25 +80,20 @@ fd2_screen_is_format_supported(struct pipe_screen *pscreen,
 	if ((usage & PIPE_BIND_DEPTH_STENCIL) &&
 			(fd_pipe2depth(format) != (enum adreno_rb_depth_format)~0)) {
 		retval |= PIPE_BIND_DEPTH_STENCIL;
 	}
 
 	if ((usage & PIPE_BIND_INDEX_BUFFER) &&
 			(fd_pipe2index(format) != (enum pc_di_index_size)~0)) {
 		retval |= PIPE_BIND_INDEX_BUFFER;
 	}
 
-	if (usage & PIPE_BIND_TRANSFER_READ)
-		retval |= PIPE_BIND_TRANSFER_READ;
-	if (usage & PIPE_BIND_TRANSFER_WRITE)
-		retval |= PIPE_BIND_TRANSFER_WRITE;
-
 	if (retval != usage) {
 		DBG("not supported: format=%s, target=%d, sample_count=%d, "
 				"usage=%x, retval=%x", util_format_name(format),
 				target, sample_count, usage, retval);
 	}
 
 	return retval == usage;
 }
 
 void
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_screen.c b/src/gallium/drivers/freedreno/a3xx/fd3_screen.c
index 52a284e..998ec7a 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_screen.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_screen.c
@@ -80,25 +80,20 @@ fd3_screen_is_format_supported(struct pipe_screen *pscreen,
 			(fd_pipe2depth(format) != (enum adreno_rb_depth_format)~0) &&
 			(fd3_pipe2tex(format) != (enum a3xx_tex_fmt)~0)) {
 		retval |= PIPE_BIND_DEPTH_STENCIL;
 	}
 
 	if ((usage & PIPE_BIND_INDEX_BUFFER) &&
 			(fd_pipe2index(format) != (enum pc_di_index_size)~0)) {
 		retval |= PIPE_BIND_INDEX_BUFFER;
 	}
 
-	if (usage & PIPE_BIND_TRANSFER_READ)
-		retval |= PIPE_BIND_TRANSFER_READ;
-	if (usage & PIPE_BIND_TRANSFER_WRITE)
-		retval |= PIPE_BIND_TRANSFER_WRITE;
-
 	if (retval != usage) {
 		DBG("not supported: format=%s, target=%d, sample_count=%d, "
 				"usage=%x, retval=%x", util_format_name(format),
 				target, sample_count, usage, retval);
 	}
 
 	return retval == usage;
 }
 
 void
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_screen.c b/src/gallium/drivers/freedreno/a4xx/fd4_screen.c
index aa60658..6006bb9 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_screen.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_screen.c
@@ -79,25 +79,20 @@ fd4_screen_is_format_supported(struct pipe_screen *pscreen,
 			(fd4_pipe2depth(format) != (enum a4xx_depth_format)~0) &&
 			(fd4_pipe2tex(format) != (enum a4xx_tex_fmt)~0)) {
 		retval |= PIPE_BIND_DEPTH_STENCIL;
 	}
 
 	if ((usage & PIPE_BIND_INDEX_BUFFER) &&
 			(fd_pipe2index(format) != (enum pc_di_index_size)~0)) {
 		retval |= PIPE_BIND_INDEX_BUFFER;
 	}
 
-	if (usage & PIPE_BIND_TRANSFER_READ)
-		retval |= PIPE_BIND_TRANSFER_READ;
-	if (usage & PIPE_BIND_TRANSFER_WRITE)
-		retval |= PIPE_BIND_TRANSFER_WRITE;
-
 	if (retval != usage) {
 		DBG("not supported: format=%s, target=%d, sample_count=%d, "
 				"usage=%x, retval=%x", util_format_name(format),
 				target, sample_count, usage, retval);
 	}
 
 	return retval == usage;
 }
 
 void
diff --git a/src/gallium/drivers/ilo/ilo_resource.c b/src/gallium/drivers/ilo/ilo_resource.c
index 7961288..5ca7e1b 100644
--- a/src/gallium/drivers/ilo/ilo_resource.c
+++ b/src/gallium/drivers/ilo/ilo_resource.c
@@ -197,21 +197,21 @@ resource_get_image_info(const struct pipe_resource *templ,
    info->aux_disable = (templ->usage == PIPE_USAGE_STAGING);
 
    if (templ->bind & PIPE_BIND_LINEAR)
       info->valid_tilings = 1 << GEN6_TILING_NONE;
 
    /*
     * Tiled images must be mapped via GTT to get a linear view.  Prefer linear
     * images when the image size is greater than one-fourth of the mappable
     * aperture.
     */
-   if (templ->bind & (PIPE_BIND_TRANSFER_WRITE | PIPE_BIND_TRANSFER_READ))
+   if (templ->usage == PIPE_USAGE_STAGING)
       info->prefer_linear_threshold = dev->aperture_mappable / 4;
 
    info->bind_surface_sampler = (templ->bind & PIPE_BIND_SAMPLER_VIEW);
    info->bind_surface_dp_render = (templ->bind & PIPE_BIND_RENDER_TARGET);
    info->bind_surface_dp_typed = (templ->bind &
          (PIPE_BIND_SHADER_IMAGE | PIPE_BIND_COMPUTE_RESOURCE));
    info->bind_zs = (templ->bind & PIPE_BIND_DEPTH_STENCIL);
    info->bind_scanout = (templ->bind & PIPE_BIND_SCANOUT);
    info->bind_cursor = (templ->bind & PIPE_BIND_CURSOR);
 }
diff --git a/src/gallium/drivers/ilo/ilo_transfer.c b/src/gallium/drivers/ilo/ilo_transfer.c
index 87607eb..c0dab31 100644
--- a/src/gallium/drivers/ilo/ilo_transfer.c
+++ b/src/gallium/drivers/ilo/ilo_transfer.c
@@ -173,21 +173,20 @@ xfer_alloc_staging_res(struct ilo_transfer *xfer)
       /* use 2D array for any texture target */
       templ.target = PIPE_TEXTURE_2D_ARRAY;
       templ.width0 = box->width;
    }
 
    templ.height0 = box->height;
    templ.depth0 = 1;
    templ.array_size = box->depth;
    templ.nr_samples = 1;
    templ.usage = PIPE_USAGE_STAGING;
-   templ.bind = PIPE_BIND_TRANSFER_WRITE;
 
    if (xfer->base.usage & PIPE_TRANSFER_FLUSH_EXPLICIT) {
       templ.flags = PIPE_RESOURCE_FLAG_MAP_PERSISTENT |
                     PIPE_RESOURCE_FLAG_MAP_COHERENT;
    }
 
    xfer->staging.res = res->screen->resource_create(res->screen, &templ);
 
    if (xfer->staging.res && xfer->staging.res->target != PIPE_BUFFER) {
       assert(ilo_texture(xfer->staging.res)->image.tiling ==
@@ -1104,21 +1103,21 @@ buf_pwrite(struct ilo_context *ilo, struct pipe_resource *res,
       else {
          struct pipe_resource templ, *staging;
 
          /*
           * allocate a staging buffer to hold the data and pipelined copy it
           * over
           */
          templ = *res;
          templ.width0 = size;
          templ.usage = PIPE_USAGE_STAGING;
-         templ.bind = PIPE_BIND_TRANSFER_WRITE;
+         templ.bind = 0;
          staging = ilo->base.screen->resource_create(ilo->base.screen, &templ);
          if (staging) {
             const struct ilo_vma *staging_vma = ilo_resource_get_vma(staging);
             struct pipe_box staging_box;
 
             /* offset by staging_vma->bo_offset for pwrite */
             intel_bo_pwrite(staging_vma->bo, staging_vma->bo_offset,
                   size, data);
 
             u_box_1d(0, size, &staging_box);
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
index ed74c3a..2ced8f1 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
@@ -367,24 +367,22 @@ nv30_screen_is_format_supported(struct pipe_screen *pscreen,
    if (sample_count > nv30_screen(pscreen)->max_sample_count)
       return false;
 
    if (!(0x00000017 & (1 << sample_count)))
       return false;
 
    if (!util_format_is_supported(format, bindings)) {
       return false;
    }
 
-   /* transfers & shared are always supported */
-   bindings &= ~(PIPE_BIND_TRANSFER_READ |
-                 PIPE_BIND_TRANSFER_WRITE |
-                 PIPE_BIND_SHARED);
+   /* shared is always supported */
+   bindings &= ~PIPE_BIND_SHARED;
 
    return (nv30_format_info(pscreen, format)->bindings & bindings) == bindings;
 }
 
 static void
 nv30_screen_fence_emit(struct pipe_screen *pscreen, uint32_t *sequence)
 {
    struct nv30_screen *screen = nv30_screen(pscreen);
    struct nouveau_pushbuf *push = screen->base.pushbuf;
 
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
index 57c0c2b..1ec791d 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
@@ -68,24 +68,22 @@ nv50_screen_is_format_supported(struct pipe_screen *pscreen,
    }
 
    if (bindings & PIPE_BIND_LINEAR)
       if (util_format_is_depth_or_stencil(format) ||
           (target != PIPE_TEXTURE_1D &&
            target != PIPE_TEXTURE_2D &&
            target != PIPE_TEXTURE_RECT) ||
           sample_count > 1)
          return false;
 
-   /* transfers & shared are always supported */
-   bindings &= ~(PIPE_BIND_TRANSFER_READ |
-                 PIPE_BIND_TRANSFER_WRITE |
-                 PIPE_BIND_LINEAR |
+   /* shared is always supported */
+   bindings &= ~(PIPE_BIND_LINEAR |
                  PIPE_BIND_SHARED);
 
    return (( nv50_format_table[format].usage |
             nv50_vertex_format[format].usage) & bindings) == bindings;
 }
 
 static int
 nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
 {
    const uint16_t class_3d = nouveau_screen(pscreen)->class_3d;
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
index 0627f3d..77b38b5 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
@@ -78,23 +78,21 @@ nvc0_screen_is_format_supported(struct pipe_screen *pscreen,
    if ((desc->layout == UTIL_FORMAT_LAYOUT_ETC ||
         desc->layout == UTIL_FORMAT_LAYOUT_ASTC) &&
        /* The claim is that this should work on GM107 but it doesn't. Need to
         * test further and figure out if it's a nouveau issue or a HW one.
        nouveau_screen(pscreen)->class_3d < GM107_3D_CLASS &&
         */
        nouveau_screen(pscreen)->class_3d != NVEA_3D_CLASS)
       return false;
 
    /* transfers & shared are always supported */
-   bindings &= ~(PIPE_BIND_TRANSFER_READ |
-                 PIPE_BIND_TRANSFER_WRITE |
-                 PIPE_BIND_LINEAR |
+   bindings &= ~(PIPE_BIND_LINEAR |
                  PIPE_BIND_SHARED);
 
    if (bindings & PIPE_BIND_SHADER_IMAGE && sample_count > 1 &&
        nouveau_screen(pscreen)->class_3d >= GM107_3D_CLASS) {
       /* MS images are currently unsupported on Maxwell because they have to
        * be handled explicitly. */
       return false;
    }
 
    return (( nvc0_format_table[format].usage |
diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c
index 509feae..f6949ce 100644
--- a/src/gallium/drivers/r300/r300_screen.c
+++ b/src/gallium/drivers/r300/r300_screen.c
@@ -657,26 +657,20 @@ static boolean r300_is_format_supported(struct pipe_screen* screen,
                 retval |= PIPE_BIND_VERTEX_BUFFER;
             }
         } else {
             /* SW TCL */
             if (!util_format_is_pure_integer(format)) {
                 retval |= PIPE_BIND_VERTEX_BUFFER;
             }
         }
     }
 
-    /* Transfers are always supported. */
-    if (usage & PIPE_BIND_TRANSFER_READ)
-        retval |= PIPE_BIND_TRANSFER_READ;
-    if (usage & PIPE_BIND_TRANSFER_WRITE)
-        retval |= PIPE_BIND_TRANSFER_WRITE;
-
     return retval == usage;
 }
 
 static void r300_destroy_screen(struct pipe_screen* pscreen)
 {
     struct r300_screen* r300screen = r300_screen(pscreen);
     struct radeon_winsys *rws = radeon_winsys(pscreen);
 
     if (rws && !rws->unref(rws))
       return;
diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
index ed385ee..d137514 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -287,25 +287,20 @@ boolean evergreen_is_format_supported(struct pipe_screen *screen,
 	if ((usage & PIPE_BIND_DEPTH_STENCIL) &&
 	    r600_is_zs_format_supported(format)) {
 		retval |= PIPE_BIND_DEPTH_STENCIL;
 	}
 
 	if ((usage & PIPE_BIND_VERTEX_BUFFER) &&
 	    r600_is_vertex_format_supported(format)) {
 		retval |= PIPE_BIND_VERTEX_BUFFER;
 	}
 
-	if (usage & PIPE_BIND_TRANSFER_READ)
-		retval |= PIPE_BIND_TRANSFER_READ;
-	if (usage & PIPE_BIND_TRANSFER_WRITE)
-		retval |= PIPE_BIND_TRANSFER_WRITE;
-
 	if ((usage & PIPE_BIND_LINEAR) &&
 	    !util_format_is_compressed(format) &&
 	    !(usage & PIPE_BIND_DEPTH_STENCIL))
 		retval |= PIPE_BIND_LINEAR;
 
 	return retval == usage;
 }
 
 static void *evergreen_create_blend_state_mode(struct pipe_context *ctx,
 					       const struct pipe_blend_state *state, int mode)
diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
index c55c532..2b58d98 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -228,25 +228,20 @@ boolean r600_is_format_supported(struct pipe_screen *screen,
 	if ((usage & PIPE_BIND_DEPTH_STENCIL) &&
 	    r600_is_zs_format_supported(format)) {
 		retval |= PIPE_BIND_DEPTH_STENCIL;
 	}
 
 	if ((usage & PIPE_BIND_VERTEX_BUFFER) &&
 	    r600_is_vertex_format_supported(format)) {
 		retval |= PIPE_BIND_VERTEX_BUFFER;
 	}
 
-	if (usage & PIPE_BIND_TRANSFER_READ)
-		retval |= PIPE_BIND_TRANSFER_READ;
-	if (usage & PIPE_BIND_TRANSFER_WRITE)
-		retval |= PIPE_BIND_TRANSFER_WRITE;
-
 	if ((usage & PIPE_BIND_LINEAR) &&
 	    !util_format_is_compressed(format) &&
 	    !(usage & PIPE_BIND_DEPTH_STENCIL))
 		retval |= PIPE_BIND_LINEAR;
 
 	return retval == usage;
 }
 
 static void r600_emit_polygon_offset(struct r600_context *rctx, struct r600_atom *a)
 {
diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c
index a600793..2e8b6f4 100644
--- a/src/gallium/drivers/radeon/r600_buffer_common.c
+++ b/src/gallium/drivers/radeon/r600_buffer_common.c
@@ -379,21 +379,21 @@ static void *r600_buffer_transfer_map(struct pipe_context *ctx,
 	}
 	/* Using a staging buffer in GTT for larger reads is much faster. */
 	else if ((usage & PIPE_TRANSFER_READ) &&
 		 !(usage & (PIPE_TRANSFER_WRITE |
 			    PIPE_TRANSFER_PERSISTENT)) &&
 		 rbuffer->domains & RADEON_DOMAIN_VRAM &&
 		 r600_can_dma_copy_buffer(rctx, 0, box->x, box->width)) {
 		struct r600_resource *staging;
 
 		staging = (struct r600_resource*) pipe_buffer_create(
-				ctx->screen, PIPE_BIND_TRANSFER_READ, PIPE_USAGE_STAGING,
+				ctx->screen, 0, PIPE_USAGE_STAGING,
 				box->width + (box->x % R600_MAP_BUFFER_ALIGNMENT));
 		if (staging) {
 			/* Copy the VRAM buffer to the staging buffer. */
 			ctx->resource_copy_region(ctx, &staging->b.b, 0,
 						  box->x % R600_MAP_BUFFER_ALIGNMENT,
 						  0, 0, resource, level, box);
 
 			data = r600_buffer_map_sync_with_rings(rctx, staging, PIPE_TRANSFER_READ);
 			if (!data) {
 				r600_resource_reference(&staging, NULL);
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index 280a9f8..0d3de9a 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -1849,25 +1849,20 @@ static boolean si_is_format_supported(struct pipe_screen *screen,
 	if ((usage & PIPE_BIND_DEPTH_STENCIL) &&
 	    si_is_zs_format_supported(format)) {
 		retval |= PIPE_BIND_DEPTH_STENCIL;
 	}
 
 	if ((usage & PIPE_BIND_VERTEX_BUFFER) &&
 	    si_is_vertex_format_supported(screen, format)) {
 		retval |= PIPE_BIND_VERTEX_BUFFER;
 	}
 
-	if (usage & PIPE_BIND_TRANSFER_READ)
-		retval |= PIPE_BIND_TRANSFER_READ;
-	if (usage & PIPE_BIND_TRANSFER_WRITE)
-		retval |= PIPE_BIND_TRANSFER_WRITE;
-
 	if ((usage & PIPE_BIND_LINEAR) &&
 	    !util_format_is_compressed(format) &&
 	    !(usage & PIPE_BIND_DEPTH_STENCIL))
 		retval |= PIPE_BIND_LINEAR;
 
 	return retval == usage;
 }
 
 /*
  * framebuffer handling
diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c
index 652d9b4..3dc85d5 100644
--- a/src/gallium/drivers/vc4/vc4_screen.c
+++ b/src/gallium/drivers/vc4/vc4_screen.c
@@ -487,25 +487,20 @@ vc4_screen_is_format_supported(struct pipe_screen *pscreen,
              format == PIPE_FORMAT_X8Z24_UNORM)) {
                 retval |= PIPE_BIND_DEPTH_STENCIL;
         }
 
         if ((usage & PIPE_BIND_INDEX_BUFFER) &&
             (format == PIPE_FORMAT_I8_UINT ||
              format == PIPE_FORMAT_I16_UINT)) {
                 retval |= PIPE_BIND_INDEX_BUFFER;
         }
 
-        if (usage & PIPE_BIND_TRANSFER_READ)
-                retval |= PIPE_BIND_TRANSFER_READ;
-        if (usage & PIPE_BIND_TRANSFER_WRITE)
-                retval |= PIPE_BIND_TRANSFER_WRITE;
-
 #if 0
         if (retval != usage) {
                 fprintf(stderr,
                         "not supported: format=%s, target=%d, sample_count=%d, "
                         "usage=0x%x, retval=0x%x\n", util_format_name(format),
                         target, sample_count, usage, retval);
         }
 #endif
 
         return retval == usage;
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 5361ed6..88aa050 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -403,22 +403,21 @@ enum pipe_flush_flags
  * the ways a resource might be used.
  */
 #define PIPE_BIND_DEPTH_STENCIL        (1 << 0) /* create_surface */
 #define PIPE_BIND_RENDER_TARGET        (1 << 1) /* create_surface */
 #define PIPE_BIND_BLENDABLE            (1 << 2) /* create_surface */
 #define PIPE_BIND_SAMPLER_VIEW         (1 << 3) /* create_sampler_view */
 #define PIPE_BIND_VERTEX_BUFFER        (1 << 4) /* set_vertex_buffers */
 #define PIPE_BIND_INDEX_BUFFER         (1 << 5) /* draw_elements */
 #define PIPE_BIND_CONSTANT_BUFFER      (1 << 6) /* set_constant_buffer */
 #define PIPE_BIND_DISPLAY_TARGET       (1 << 7) /* flush_front_buffer */
-#define PIPE_BIND_TRANSFER_WRITE       (1 << 8) /* transfer_map */
-#define PIPE_BIND_TRANSFER_READ        (1 << 9) /* transfer_map */
+/* gap */
 #define PIPE_BIND_STREAM_OUTPUT        (1 << 10) /* set_stream_output_buffers */
 #define PIPE_BIND_CURSOR               (1 << 11) /* mouse cursor */
 #define PIPE_BIND_CUSTOM               (1 << 12) /* state-tracker/winsys usages */
 #define PIPE_BIND_GLOBAL               (1 << 13) /* set_global_binding */
 #define PIPE_BIND_SHADER_BUFFER        (1 << 14) /* set_shader_buffers */
 #define PIPE_BIND_SHADER_IMAGE         (1 << 15) /* set_shader_images */
 #define PIPE_BIND_COMPUTE_RESOURCE     (1 << 16) /* set_compute_resources */
 #define PIPE_BIND_COMMAND_ARGS_BUFFER  (1 << 17) /* pipe_draw_info.indirect */
 #define PIPE_BIND_QUERY_BUFFER         (1 << 18) /* get_query_result_resource */
 
diff --git a/src/gallium/state_trackers/clover/core/format.cpp b/src/gallium/state_trackers/clover/core/format.cpp
index aee1cc9..5701292 100644
--- a/src/gallium/state_trackers/clover/core/format.cpp
+++ b/src/gallium/state_trackers/clover/core/format.cpp
@@ -140,23 +140,21 @@ namespace clover {
          throw error(CL_IMAGE_FORMAT_NOT_SUPPORTED);
 
       return it->second;
    }
 
    std::set<cl_image_format>
    supported_formats(const context &ctx, cl_mem_object_type type) {
       std::set<cl_image_format> s;
       pipe_texture_target target = translate_target(type);
       unsigned bindings = (PIPE_BIND_SAMPLER_VIEW |
-                           PIPE_BIND_COMPUTE_RESOURCE |
-                           PIPE_BIND_TRANSFER_READ |
-                           PIPE_BIND_TRANSFER_WRITE);
+                           PIPE_BIND_COMPUTE_RESOURCE);
 
       for (auto f : formats) {
          if (all_of([=](const device &dev) {
                   return dev.pipe->is_format_supported(
                      dev.pipe, f.second, target, 1, bindings);
                }, ctx.devices()))
             s.insert(f.first);
       }
 
       return s;
diff --git a/src/gallium/state_trackers/clover/core/resource.cpp b/src/gallium/state_trackers/clover/core/resource.cpp
index 83781d3..06fd3f6 100644
--- a/src/gallium/state_trackers/clover/core/resource.cpp
+++ b/src/gallium/state_trackers/clover/core/resource.cpp
@@ -129,23 +129,21 @@ root_resource::root_resource(clover::device &dev, memory_obj &obj,
    } else {
       info.width0 = obj.size();
       info.height0 = 1;
       info.depth0 = 1;
    }
 
    info.array_size = 1;
    info.target = translate_target(obj.type());
    info.bind = (PIPE_BIND_SAMPLER_VIEW |
                 PIPE_BIND_COMPUTE_RESOURCE |
-                PIPE_BIND_GLOBAL |
-                PIPE_BIND_TRANSFER_READ |
-                PIPE_BIND_TRANSFER_WRITE);
+                PIPE_BIND_GLOBAL);
 
    if (obj.flags() & CL_MEM_USE_HOST_PTR && user_ptr_support) {
       // Page alignment is normally required for this, just try, hope for the
       // best and fall back if it fails.
       pipe = dev.pipe->resource_from_user_memory(dev.pipe, &info, obj.host_ptr());
       if (pipe)
          return;
    }
 
    if (obj.flags() & (CL_MEM_ALLOC_HOST_PTR | CL_MEM_USE_HOST_PTR)) {
diff --git a/src/gallium/state_trackers/nine/adapter9.c b/src/gallium/state_trackers/nine/adapter9.c
index 41140d4..acf205d 100644
--- a/src/gallium/state_trackers/nine/adapter9.c
+++ b/src/gallium/state_trackers/nine/adapter9.c
@@ -381,22 +381,21 @@ NineAdapter9_CheckDeviceMultiSampleType( struct NineAdapter9 *This,
         d3dformat_to_string(SurfaceFormat), Windowed, MultiSampleType,
         pQualityLevels);
 
     hr = NineAdapter9_GetScreen(This, DeviceType, &screen);
     if (FAILED(hr))
         return hr;
 
     if (depth_stencil_format(SurfaceFormat))
         bind = d3d9_get_pipe_depth_format_bindings(SurfaceFormat);
     else /* render-target */
-        bind = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_TRANSFER_READ |
-               PIPE_BIND_TRANSFER_WRITE | PIPE_BIND_RENDER_TARGET;
+        bind = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET;
 
     pf = d3d9_to_pipe_format_checked(screen, SurfaceFormat, PIPE_TEXTURE_2D,
                                      MultiSampleType, bind, FALSE, FALSE);
 
     if (pf == PIPE_FORMAT_NONE) {
         DBG("%s with %u samples not available.\n",
             d3dformat_to_string(SurfaceFormat), MultiSampleType);
         return D3DERR_NOTAVAILABLE;
     }
 
diff --git a/src/gallium/state_trackers/nine/buffer9.c b/src/gallium/state_trackers/nine/buffer9.c
index 387fc29..236a3ee 100644
--- a/src/gallium/state_trackers/nine/buffer9.c
+++ b/src/gallium/state_trackers/nine/buffer9.c
@@ -60,21 +60,21 @@ NineBuffer9_ctor( struct NineBuffer9 *This,
     This->pipe = pParams->device->pipe;
 
     info->screen = pParams->device->screen;
     info->target = PIPE_BUFFER;
     info->format = PIPE_FORMAT_R8_UNORM;
     info->width0 = Size;
     info->flags = 0;
 
     /* Note: WRITEONLY is just tip for resource placement, the resource
      * can still be read (but slower). */
-    info->bind = PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_TRANSFER_WRITE | PIPE_BIND_TRANSFER_READ;
+    info->bind = PIPE_BIND_VERTEX_BUFFER;
 
     /* It is hard to find clear information on where to place the buffer in
      * memory depending on the flag.
      * MSDN: resources are static, except for those with DYNAMIC, thus why you
      *   can only use DISCARD on them.
      * ATI doc: The driver has the liberty it wants for having things static
      *   or not.
      *   MANAGED: Ram + uploads to Vram copy at unlock (msdn and nvidia doc say
      *   at first draw call using the buffer)
      *   DEFAULT + Usage = 0 => System memory backing for easy read access
diff --git a/src/gallium/state_trackers/nine/cubetexture9.c b/src/gallium/state_trackers/nine/cubetexture9.c
index 1100094..dd1a430 100644
--- a/src/gallium/state_trackers/nine/cubetexture9.c
+++ b/src/gallium/state_trackers/nine/cubetexture9.c
@@ -94,23 +94,20 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
     info->usage = PIPE_USAGE_DEFAULT;
     info->flags = 0;
 
     if (Usage & D3DUSAGE_RENDERTARGET)
         info->bind |= PIPE_BIND_RENDER_TARGET;
     if (Usage & D3DUSAGE_DEPTHSTENCIL)
         info->bind |= PIPE_BIND_DEPTH_STENCIL;
 
     if (Usage & D3DUSAGE_DYNAMIC) {
         info->usage = PIPE_USAGE_DYNAMIC;
-        info->bind |=
-            PIPE_BIND_TRANSFER_READ |
-            PIPE_BIND_TRANSFER_WRITE;
     }
     if (Usage & D3DUSAGE_SOFTWAREPROCESSING)
         DBG("Application asked for Software Vertex Processing, "
             "but this is unimplemented\n");
 
     if (Pool != D3DPOOL_DEFAULT) {
         level_offsets = alloca(sizeof(unsigned) * (info->last_level + 1));
         face_size = nine_format_get_size_and_offsets(pf, level_offsets,
                                                      EdgeLength, EdgeLength,
                                                      info->last_level);
diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c
index 3f6577c..230ad02 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -247,21 +247,21 @@ NineDevice9_ctor( struct NineDevice9 *This,
 
         tmpl.target = PIPE_BUFFER;
         tmpl.format = PIPE_FORMAT_R8_UNORM;
         tmpl.width0 = 16; /* 4 floats */
         tmpl.height0 = 1;
         tmpl.depth0 = 1;
         tmpl.array_size = 1;
         tmpl.last_level = 0;
         tmpl.nr_samples = 0;
         tmpl.usage = PIPE_USAGE_DEFAULT;
-        tmpl.bind = PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_TRANSFER_WRITE;
+        tmpl.bind = PIPE_BIND_VERTEX_BUFFER;
         tmpl.flags = 0;
         This->dummy_vbo = pScreen->resource_create(pScreen, &tmpl);
 
         if (!This->dummy_vbo)
             return D3DERR_OUTOFVIDEOMEMORY;
 
         u_box_1d(0, 16, &box);
         data = This->pipe->transfer_map(This->pipe, This->dummy_vbo, 0,
                                         PIPE_TRANSFER_WRITE |
                                         PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE,
diff --git a/src/gallium/state_trackers/nine/nine_pipe.h b/src/gallium/state_trackers/nine/nine_pipe.h
index fe8e910..93e3225 100644
--- a/src/gallium/state_trackers/nine/nine_pipe.h
+++ b/src/gallium/state_trackers/nine/nine_pipe.h
@@ -232,22 +232,21 @@ d3d9_get_pipe_depth_format_bindings(D3DFORMAT format)
     case D3DFMT_D15S1:
     case D3DFMT_D24S8:
     case D3DFMT_D24X8:
     case D3DFMT_D24X4S4:
     case D3DFMT_D16:
     case D3DFMT_D24FS8:
         return PIPE_BIND_DEPTH_STENCIL;
     case D3DFMT_D32F_LOCKABLE:
     case D3DFMT_D16_LOCKABLE:
     case D3DFMT_D32_LOCKABLE:
-        return PIPE_BIND_DEPTH_STENCIL | PIPE_BIND_TRANSFER_READ |
-               PIPE_BIND_TRANSFER_WRITE;
+        return PIPE_BIND_DEPTH_STENCIL;
     case D3DFMT_DF16:
     case D3DFMT_DF24:
     case D3DFMT_INTZ:
         return PIPE_BIND_DEPTH_STENCIL | PIPE_BIND_SAMPLER_VIEW;
     default: unreachable("Unexpected format");
     }
 }
 
 static inline enum pipe_format
 d3d9_to_pipe_format_internal(D3DFORMAT format)
diff --git a/src/gallium/state_trackers/nine/swapchain9.c b/src/gallium/state_trackers/nine/swapchain9.c
index bc1c4b1..79fba28 100644
--- a/src/gallium/state_trackers/nine/swapchain9.c
+++ b/src/gallium/state_trackers/nine/swapchain9.c
@@ -294,22 +294,21 @@ NineSwapChain9_Resize( struct NineSwapChain9 *This,
     if (has_present_buffers &&
         (newBufferCount != oldBufferCount || !This->present_buffers)) {
         This->present_buffers = REALLOC(This->present_buffers,
                                         This->present_buffers == NULL ? 0 :
                                         oldBufferCount * sizeof(struct pipe_resource *),
                                         newBufferCount * sizeof(struct pipe_resource *));
         memset(This->present_buffers, 0, newBufferCount * sizeof(struct pipe_resource *));
     }
 
     for (i = 0; i < newBufferCount; ++i) {
-        tmplt.bind = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_TRANSFER_READ |
-                     PIPE_BIND_TRANSFER_WRITE | PIPE_BIND_RENDER_TARGET;
+        tmplt.bind = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET;
         tmplt.nr_samples = pParams->MultiSampleType;
         if (!has_present_buffers)
             tmplt.bind |= PIPE_BIND_SHARED | PIPE_BIND_SCANOUT | PIPE_BIND_DISPLAY_TARGET;
         tmplt.format = d3d9_to_pipe_format_checked(This->screen,
                                                    pParams->BackBufferFormat,
                                                    PIPE_TEXTURE_2D,
                                                    tmplt.nr_samples,
                                                    tmplt.bind, FALSE, FALSE);
         if (tmplt.format == PIPE_FORMAT_NONE)
             return D3DERR_INVALIDCALL;
@@ -540,22 +539,21 @@ create_present_buffer( struct NineSwapChain9 *This,
 
     tmplt.target = PIPE_TEXTURE_2D;
     tmplt.width0 = width;
     tmplt.height0 = height;
     tmplt.depth0 = 1;
     tmplt.last_level = 0;
     tmplt.array_size = 1;
     tmplt.usage = PIPE_USAGE_DEFAULT;
     tmplt.flags = 0;
     tmplt.format = PIPE_FORMAT_B8G8R8X8_UNORM;
-    tmplt.bind = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_TRANSFER_READ |
-                 PIPE_BIND_TRANSFER_WRITE | PIPE_BIND_RENDER_TARGET |
+    tmplt.bind = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET |
                  PIPE_BIND_SHARED | PIPE_BIND_SCANOUT | PIPE_BIND_DISPLAY_TARGET;
     tmplt.nr_samples = 0;
     if (This->actx->linear_framebuffer)
         tmplt.bind |= PIPE_BIND_LINEAR;
     *resource = This->screen->resource_create(This->screen, &tmplt);
 
     *present_handle = D3DWindowBuffer_create(This, *resource, 24, true);
 }
 
 static void
diff --git a/src/gallium/state_trackers/nine/texture9.c b/src/gallium/state_trackers/nine/texture9.c
index 9bc8610..875620e 100644
--- a/src/gallium/state_trackers/nine/texture9.c
+++ b/src/gallium/state_trackers/nine/texture9.c
@@ -135,23 +135,20 @@ NineTexture9_ctor( struct NineTexture9 *This,
     info->usage = PIPE_USAGE_DEFAULT;
     info->flags = 0;
 
     if (Usage & D3DUSAGE_RENDERTARGET)
         info->bind |= PIPE_BIND_RENDER_TARGET;
     if (Usage & D3DUSAGE_DEPTHSTENCIL)
         info->bind |= PIPE_BIND_DEPTH_STENCIL;
 
     if (Usage & D3DUSAGE_DYNAMIC) {
         info->usage = PIPE_USAGE_DYNAMIC;
-        info->bind |=
-            PIPE_BIND_TRANSFER_READ |
-            PIPE_BIND_TRANSFER_WRITE;
     }
 
     if (Usage & D3DUSAGE_SOFTWAREPROCESSING)
         DBG("Application asked for Software Vertex Processing, "
             "but this is unimplemented\n");
 
     if (pSharedHandle && *pSharedHandle) { /* Pool == D3DPOOL_SYSTEMMEM */
         user_buffer = (void *)*pSharedHandle;
         level_offsets = alloca(sizeof(unsigned) * (info->last_level + 1));
         (void) nine_format_get_size_and_offsets(pf, level_offsets,
diff --git a/src/gallium/state_trackers/nine/volumetexture9.c b/src/gallium/state_trackers/nine/volumetexture9.c
index e70f3c1..e5db6fc 100644
--- a/src/gallium/state_trackers/nine/volumetexture9.c
+++ b/src/gallium/state_trackers/nine/volumetexture9.c
@@ -87,23 +87,20 @@ NineVolumeTexture9_ctor( struct NineVolumeTexture9 *This,
     else
         info->last_level = util_logbase2(MAX2(MAX2(Width, Height), Depth));
     info->array_size = 1;
     info->nr_samples = 0;
     info->bind = PIPE_BIND_SAMPLER_VIEW;
     info->usage = PIPE_USAGE_DEFAULT;
     info->flags = 0;
 
     if (Usage & D3DUSAGE_DYNAMIC) {
         info->usage = PIPE_USAGE_DYNAMIC;
-        info->bind |=
-            PIPE_BIND_TRANSFER_READ |
-            PIPE_BIND_TRANSFER_WRITE;
     }
     if (Usage & D3DUSAGE_SOFTWAREPROCESSING)
         DBG("Application asked for Software Vertex Processing, "
             "but this is unimplemented\n");
 
     This->volumes = CALLOC(info->last_level + 1, sizeof(*This->volumes));
     if (!This->volumes)
         return E_OUTOFMEMORY;
     This->base.pstype = 3;
 
diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c
index 3cfdf78..b79f106 100644
--- a/src/mesa/state_tracker/st_cb_readpixels.c
+++ b/src/mesa/state_tracker/st_cb_readpixels.c
@@ -267,21 +267,20 @@ blit_to_staging(struct st_context *st, struct st_renderbuffer *strb,
     * Need to check for NPOT texture support. */
    if (!screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES) &&
        (!util_is_power_of_two(width) ||
         !util_is_power_of_two(height)))
       return NULL;
 
    /* create the destination texture */
    memset(&dst_templ, 0, sizeof(dst_templ));
    dst_templ.target = PIPE_TEXTURE_2D;
    dst_templ.format = dst_format;
-   dst_templ.bind = PIPE_BIND_TRANSFER_READ;
    if (util_format_is_depth_or_stencil(dst_format))
       dst_templ.bind |= PIPE_BIND_DEPTH_STENCIL;
    else
       dst_templ.bind |= PIPE_BIND_RENDER_TARGET;
    dst_templ.usage = PIPE_USAGE_STAGING;
 
    st_gl_texture_dims_to_pipe_dims(GL_TEXTURE_2D, width, height, 1,
                                    &dst_templ.width0, &dst_templ.height0,
                                    &dst_templ.depth0, &dst_templ.array_size);
 
@@ -397,21 +396,21 @@ st_ReadPixels(struct gl_context *ctx, GLint x, GLint y,
 {
    struct st_context *st = st_context(ctx);
    struct gl_renderbuffer *rb =
          _mesa_get_read_renderbuffer_for_format(ctx, format);
    struct st_renderbuffer *strb = st_renderbuffer(rb);
    struct pipe_context *pipe = st->pipe;
    struct pipe_screen *screen = pipe->screen;
    struct pipe_resource *src;
    struct pipe_resource *dst = NULL;
    enum pipe_format dst_format, src_format;
-   unsigned bind = PIPE_BIND_TRANSFER_READ;
+   unsigned bind;
    struct pipe_transfer *tex_xfer;
    ubyte *map = NULL;
    int dst_x, dst_y;
 
    /* Validate state (to be sure we have up-to-date framebuffer surfaces)
     * and flush the bitmap cache prior to reading. */
    st_validate_state(st, ST_PIPELINE_RENDER);
    st_flush_bitmap_cache(st);
 
    if (!st->prefer_blit_based_texture_transfer) {
@@ -445,23 +444,23 @@ st_ReadPixels(struct gl_context *ctx, GLint x, GLint y,
    src_format = util_format_intensity_to_red(src_format);
 
    if (!src_format ||
        !screen->is_format_supported(screen, src_format, src->target,
                                     src->nr_samples,
                                     PIPE_BIND_SAMPLER_VIEW)) {
       goto fallback;
    }
 
    if (format == GL_DEPTH_COMPONENT || format == GL_DEPTH_STENCIL)
-      bind |= PIPE_BIND_DEPTH_STENCIL;
+      bind = PIPE_BIND_DEPTH_STENCIL;
    else
-      bind |= PIPE_BIND_RENDER_TARGET;
+      bind = PIPE_BIND_RENDER_TARGET;
 
    /* Choose the destination format by finding the best match
     * for the format+type combo. */
    dst_format = st_choose_matching_format(st, bind, format, type,
                                           pack->SwapBytes);
    if (dst_format == PIPE_FORMAT_NONE) {
       goto fallback;
    }
 
    if (st->pbo.download_enabled && _mesa_is_bufferobj(pack->BufferObj)) {
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index 62c2900..fa360b9 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -1814,21 +1814,21 @@ st_GetTexSubImage(struct gl_context * ctx,
    struct st_texture_image *stImage = st_texture_image(texImage);
    struct st_texture_object *stObj = st_texture_object(texImage->TexObject);
    struct pipe_resource *src = stObj->pt;
    struct pipe_resource *dst = NULL;
    struct pipe_resource dst_templ;
    enum pipe_format dst_format, src_format;
    mesa_format mesa_format;
    GLenum gl_target = texImage->TexObject->Target;
    enum pipe_texture_target pipe_target;
    struct pipe_blit_info blit;
-   unsigned bind = PIPE_BIND_TRANSFER_READ;
+   unsigned bind;
    struct pipe_transfer *tex_xfer;
    ubyte *map = NULL;
    boolean done = FALSE;
 
    assert(!_mesa_is_format_etc2(texImage->TexFormat) &&
           texImage->TexFormat != MESA_FORMAT_ETC1_RGB8);
 
    st_flush_bitmap_cache(st);
 
    if (!st->prefer_blit_based_texture_transfer &&
@@ -1878,23 +1878,23 @@ st_GetTexSubImage(struct gl_context * ctx,
    src_format = util_format_intensity_to_red(src_format);
 
    if (!src_format ||
        !screen->is_format_supported(screen, src_format, src->target,
                                     src->nr_samples,
                                     PIPE_BIND_SAMPLER_VIEW)) {
       goto fallback;
    }
 
    if (format == GL_DEPTH_COMPONENT || format == GL_DEPTH_STENCIL)
-      bind |= PIPE_BIND_DEPTH_STENCIL;
+      bind = PIPE_BIND_DEPTH_STENCIL;
    else
-      bind |= PIPE_BIND_RENDER_TARGET;
+      bind = PIPE_BIND_RENDER_TARGET;
 
    /* GetTexImage only returns a single face for cubemaps. */
    if (gl_target == GL_TEXTURE_CUBE_MAP) {
       gl_target = GL_TEXTURE_2D;
    }
    pipe_target = gl_target_to_pipe(gl_target);
 
    /* Choose the destination format by finding the best match
     * for the format+type combo. */
    dst_format = st_choose_matching_format(st, bind, format, type,
-- 
2.7.4



More information about the mesa-dev mailing list