Patches 1 and 3-7:

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



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

---
  src/gallium/auxiliary/util/u_upload_mgr.c        | 9 ++++++---
  src/gallium/auxiliary/util/u_upload_mgr.h        | 2 +-
  src/gallium/drivers/freedreno/a3xx/fd3_context.c | 2 +-
  src/gallium/drivers/freedreno/a4xx/fd4_context.c | 2 +-
  src/gallium/drivers/freedreno/a5xx/fd5_context.c | 2 +-
  src/gallium/drivers/r300/r300_context.c          | 2 +-
  src/gallium/drivers/r600/r600_pipe_common.c      | 4 ++--
  src/gallium/drivers/radeon/r600_pipe_common.c    | 4 ++--
  src/gallium/drivers/svga/svga_context.c          | 6 +++---
  src/gallium/drivers/svga/svga_resource_texture.c | 2 +-
  src/gallium/drivers/virgl/virgl_context.c        | 2 +-
  11 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_upload_mgr.c 
b/src/gallium/auxiliary/util/u_upload_mgr.c
index 4bb14d6..e3b0fb3 100644
--- a/src/gallium/auxiliary/util/u_upload_mgr.c
+++ b/src/gallium/auxiliary/util/u_upload_mgr.c
@@ -37,43 +37,45 @@
#include "u_upload_mgr.h" struct u_upload_mgr {
     struct pipe_context *pipe;
unsigned default_size; /* Minimum size of the upload buffer, in bytes. */
     unsigned bind;          /* Bitmask of PIPE_BIND_* flags. */
     enum pipe_resource_usage usage;
+   unsigned flags;
     unsigned map_flags;     /* Bitmask of PIPE_TRANSFER_* flags. */
     boolean map_persistent; /* If persistent mappings are supported. */
struct pipe_resource *buffer; /* Upload buffer. */
     struct pipe_transfer *transfer; /* Transfer object for the upload buffer. 
*/
     uint8_t *map;    /* Pointer to the mapped upload buffer. */
     unsigned offset; /* Aligned offset to the upload buffer, pointing
                       * at the first unused byte. */
  };
struct u_upload_mgr *
  u_upload_create(struct pipe_context *pipe, unsigned default_size,
-                unsigned bind, enum pipe_resource_usage usage)
+                unsigned bind, enum pipe_resource_usage usage, unsigned flags)
  {
     struct u_upload_mgr *upload = CALLOC_STRUCT(u_upload_mgr);
     if (!upload)
        return NULL;
upload->pipe = pipe;
     upload->default_size = default_size;
     upload->bind = bind;
     upload->usage = usage;
+   upload->flags = flags;
upload->map_persistent =
        pipe->screen->get_param(pipe->screen,
                                PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT);
if (upload->map_persistent) {
        upload->map_flags = PIPE_TRANSFER_WRITE |
                            PIPE_TRANSFER_UNSYNCHRONIZED |
                            PIPE_TRANSFER_PERSISTENT |
                            PIPE_TRANSFER_COHERENT;
@@ -87,28 +89,28 @@ u_upload_create(struct pipe_context *pipe, unsigned 
default_size,
     return upload;
  }
struct u_upload_mgr *
  u_upload_create_default(struct pipe_context *pipe)
  {
     return u_upload_create(pipe, 1024 * 1024,
                            PIPE_BIND_VERTEX_BUFFER |
                            PIPE_BIND_INDEX_BUFFER |
                            PIPE_BIND_CONSTANT_BUFFER,
-                          PIPE_USAGE_STREAM);
+                          PIPE_USAGE_STREAM, 0);
  }
struct u_upload_mgr *
  u_upload_clone(struct pipe_context *pipe, struct u_upload_mgr *upload)
  {
     return u_upload_create(pipe, upload->default_size, upload->bind,
-                          upload->usage);
+                          upload->usage, upload->flags);
  }
static void
  upload_unmap_internal(struct u_upload_mgr *upload, boolean destroying)
  {
     if (!destroying && upload->map_persistent)
        return;
if (upload->transfer) {
        struct pipe_box *box = &upload->transfer->box;
@@ -162,20 +164,21 @@ u_upload_alloc_buffer(struct u_upload_mgr *upload, 
unsigned min_size)
/* Allocate a new one:
      */
     size = align(MAX2(upload->default_size, min_size), 4096);
memset(&buffer, 0, sizeof buffer);
     buffer.target = PIPE_BUFFER;
     buffer.format = PIPE_FORMAT_R8_UNORM; /* want TYPELESS or similar */
     buffer.bind = upload->bind;
     buffer.usage = upload->usage;
+   buffer.flags = upload->flags;
     buffer.width0 = size;
     buffer.height0 = 1;
     buffer.depth0 = 1;
     buffer.array_size = 1;
if (upload->map_persistent) {
        buffer.flags = PIPE_RESOURCE_FLAG_MAP_PERSISTENT |
                       PIPE_RESOURCE_FLAG_MAP_COHERENT;
     }
diff --git a/src/gallium/auxiliary/util/u_upload_mgr.h b/src/gallium/auxiliary/util/u_upload_mgr.h
index 536467e..875fd9a 100644
--- a/src/gallium/auxiliary/util/u_upload_mgr.h
+++ b/src/gallium/auxiliary/util/u_upload_mgr.h
@@ -45,21 +45,21 @@ extern "C" {
  /**
   * Create the upload manager.
   *
   * \param pipe          Pipe driver.
   * \param default_size  Minimum size of the upload buffer, in bytes.
   * \param bind          Bitmask of PIPE_BIND_* flags.
   * \param usage         PIPE_USAGE_*
   */
  struct u_upload_mgr *
  u_upload_create(struct pipe_context *pipe, unsigned default_size,
-                unsigned bind, enum pipe_resource_usage usage);
+                unsigned bind, enum pipe_resource_usage usage, unsigned flags);
/**
   * Create the default uploader for pipe_context. Only pipe_context::screen
   * needs to be set for this to succeed.
   */
  struct u_upload_mgr *
  u_upload_create_default(struct pipe_context *pipe);
/**
   * Create an uploader with identical parameters as another one, but using
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_context.c 
b/src/gallium/drivers/freedreno/a3xx/fd3_context.c
index 476d06d..3623b9c 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_context.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_context.c
@@ -107,14 +107,14 @@ fd3_context_create(struct pipe_screen *pscreen, void 
*priv, unsigned flags)
                        DRM_FREEDRENO_GEM_TYPE_KMEM);
fd3_ctx->vsc_size_mem = fd_bo_new(screen->dev, 0x1000,
                        DRM_FREEDRENO_GEM_TYPE_KMEM);
fd_context_setup_common_vbos(&fd3_ctx->base); fd3_query_context_init(pctx); fd3_ctx->border_color_uploader = u_upload_create(pctx, 4096, 0,
-                                                         PIPE_USAGE_STREAM);
+                                                         PIPE_USAGE_STREAM, 0);
return pctx;
  }
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_context.c 
b/src/gallium/drivers/freedreno/a4xx/fd4_context.c
index 82ba94a..1f5546d 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_context.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_context.c
@@ -107,14 +107,14 @@ fd4_context_create(struct pipe_screen *pscreen, void 
*priv, unsigned flags)
                        DRM_FREEDRENO_GEM_TYPE_KMEM);
fd4_ctx->vsc_size_mem = fd_bo_new(screen->dev, 0x1000,
                        DRM_FREEDRENO_GEM_TYPE_KMEM);
fd_context_setup_common_vbos(&fd4_ctx->base); fd4_query_context_init(pctx); fd4_ctx->border_color_uploader = u_upload_create(pctx, 4096, 0,
-                                                         PIPE_USAGE_STREAM);
+                                                         PIPE_USAGE_STREAM, 0);
return pctx;
  }
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_context.c 
b/src/gallium/drivers/freedreno/a5xx/fd5_context.c
index 1d08633..4ebbb97 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_context.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_context.c
@@ -107,14 +107,14 @@ fd5_context_create(struct pipe_screen *pscreen, void 
*priv, unsigned flags)
                        DRM_FREEDRENO_GEM_TYPE_KMEM);
fd5_ctx->blit_mem = fd_bo_new(screen->dev, 0x1000,
                        DRM_FREEDRENO_GEM_TYPE_KMEM);
fd_context_setup_common_vbos(&fd5_ctx->base); fd5_query_context_init(pctx); fd5_ctx->border_color_uploader = u_upload_create(pctx, 4096, 0,
-                                                         PIPE_USAGE_STREAM);
+                                                         PIPE_USAGE_STREAM, 0);
return pctx;
  }
diff --git a/src/gallium/drivers/r300/r300_context.c 
b/src/gallium/drivers/r300/r300_context.c
index b55fb63..627ba0c 100644
--- a/src/gallium/drivers/r300/r300_context.c
+++ b/src/gallium/drivers/r300/r300_context.c
@@ -418,21 +418,21 @@ struct pipe_context* r300_create_context(struct 
pipe_screen* screen,
      r300_init_query_functions(r300);
      r300_init_state_functions(r300);
      r300_init_resource_functions(r300);
      r300_init_render_functions(r300);
      r300_init_states(&r300->context);
r300->context.create_video_codec = vl_create_decoder;
      r300->context.create_video_buffer = vl_video_buffer_create;
r300->uploader = u_upload_create(&r300->context, 1024 * 1024,
-                                     PIPE_BIND_CUSTOM, PIPE_USAGE_STREAM);
+                                     PIPE_BIND_CUSTOM, PIPE_USAGE_STREAM, 0);
      r300->context.stream_uploader = r300->uploader;
      r300->context.const_uploader = r300->uploader;
r300->blitter = util_blitter_create(&r300->context);
      if (r300->blitter == NULL)
          goto fail;
      r300->blitter->draw_rectangle = r300_blitter_draw_rectangle;
/* The KIL opcode needs the first texture unit to be enabled
       * on r3xx-r4xx. In order to calm down the CS checker, we bind this
diff --git a/src/gallium/drivers/r600/r600_pipe_common.c 
b/src/gallium/drivers/r600/r600_pipe_common.c
index d44860a..d20d2f4 100644
--- a/src/gallium/drivers/r600/r600_pipe_common.c
+++ b/src/gallium/drivers/r600/r600_pipe_common.c
@@ -689,26 +689,26 @@ bool r600_common_context_init(struct r600_common_context 
*rctx,
        r600_query_init(rctx);
        cayman_init_msaa(&rctx->b);
rctx->allocator_zeroed_memory =
                u_suballocator_create(&rctx->b, rscreen->info.gart_page_size,
                                      0, PIPE_USAGE_DEFAULT, 0, true);
        if (!rctx->allocator_zeroed_memory)
                return false;
rctx->b.stream_uploader = u_upload_create(&rctx->b, 1024 * 1024,
-                                                 0, PIPE_USAGE_STREAM);
+                                                 0, PIPE_USAGE_STREAM, 0);
        if (!rctx->b.stream_uploader)
                return false;
rctx->b.const_uploader = u_upload_create(&rctx->b, 128 * 1024,
-                                                0, PIPE_USAGE_DEFAULT);
+                                                0, PIPE_USAGE_DEFAULT, 0);
        if (!rctx->b.const_uploader)
                return false;
rctx->ctx = rctx->ws->ctx_create(rctx->ws);
        if (!rctx->ctx)
                return false;
if (rscreen->info.num_sdma_rings && !(rscreen->debug_flags & DBG_NO_ASYNC_DMA)) {
                rctx->dma.cs = rctx->ws->cs_create(rctx->ctx, RING_DMA,
                                                   r600_flush_dma_ring,
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c 
b/src/gallium/drivers/radeon/r600_pipe_common.c
index 7e7e42f..d85f9f0 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.c
+++ b/src/gallium/drivers/radeon/r600_pipe_common.c
@@ -438,26 +438,26 @@ bool si_common_context_init(struct r600_common_context 
*rctx,
                        return false;
        }
rctx->allocator_zeroed_memory =
                u_suballocator_create(&rctx->b, sscreen->info.gart_page_size,
                                      0, PIPE_USAGE_DEFAULT, 0, true);
        if (!rctx->allocator_zeroed_memory)
                return false;
rctx->b.stream_uploader = u_upload_create(&rctx->b, 1024 * 1024,
-                                                 0, PIPE_USAGE_STREAM);
+                                                 0, PIPE_USAGE_STREAM, 0);
        if (!rctx->b.stream_uploader)
                return false;
rctx->b.const_uploader = u_upload_create(&rctx->b, 128 * 1024,
-                                                0, PIPE_USAGE_DEFAULT);
+                                                0, PIPE_USAGE_DEFAULT, 0);
        if (!rctx->b.const_uploader)
                return false;
rctx->ctx = rctx->ws->ctx_create(rctx->ws);
        if (!rctx->ctx)
                return false;
if (sscreen->info.num_sdma_rings && !(sscreen->debug_flags & DBG(NO_ASYNC_DMA))) {
                rctx->dma.cs = rctx->ws->cs_create(rctx->ctx, RING_DMA,
                                                   r600_flush_dma_ring,
diff --git a/src/gallium/drivers/svga/svga_context.c 
b/src/gallium/drivers/svga/svga_context.c
index 8640da9..546b9f4 100644
--- a/src/gallium/drivers/svga/svga_context.c
+++ b/src/gallium/drivers/svga/svga_context.c
@@ -137,27 +137,27 @@ svga_context_create(struct pipe_screen *screen, void 
*priv, unsigned flags)
        goto cleanup;
LIST_INITHEAD(&svga->dirty_buffers); svga->pipe.screen = screen;
     svga->pipe.priv = priv;
     svga->pipe.destroy = svga_destroy;
     svga->pipe.stream_uploader = u_upload_create(&svga->pipe, 1024 * 1024,
                                                  PIPE_BIND_VERTEX_BUFFER |
                                                  PIPE_BIND_INDEX_BUFFER,
-                                                PIPE_USAGE_STREAM);
+                                                PIPE_USAGE_STREAM, 0);
     if (!svga->pipe.stream_uploader)
        goto cleanup;
svga->pipe.const_uploader = u_upload_create(&svga->pipe, 128 * 1024,
                                                 PIPE_BIND_CONSTANT_BUFFER,
-                                               PIPE_USAGE_STREAM);
+                                               PIPE_USAGE_STREAM, 0);
     if (!svga->pipe.const_uploader)
        goto cleanup;
svga->swc = svgascreen->sws->context_create(svgascreen->sws);
     if (!svga->swc)
        goto cleanup;
svga_init_resource_functions(svga);
     svga_init_blend_functions(svga);
     svga_init_blit_functions(svga);
@@ -224,21 +224,21 @@ svga_context_create(struct pipe_screen *screen, void 
*priv, unsigned flags)
     if (!svga_init_swtnl(svga))
        goto cleanup;
ret = svga_emit_initial_state(svga);
     if (ret != PIPE_OK)
        goto cleanup;
svga->const0_upload = u_upload_create(&svga->pipe,
                                           CONST0_UPLOAD_DEFAULT_SIZE,
                                           PIPE_BIND_CONSTANT_BUFFER,
-                                         PIPE_USAGE_STREAM);
+                                         PIPE_USAGE_STREAM, 0);
     if (!svga->const0_upload)
        goto cleanup;
if (!svga_texture_transfer_map_upload_create(svga))
        goto cleanup;
/* Avoid shortcircuiting state with initial value of zero.
      */
     memset(&svga->state.hw_clear, 0xcd, sizeof(svga->state.hw_clear));
     memset(&svga->state.hw_clear.framebuffer, 0x0,
diff --git a/src/gallium/drivers/svga/svga_resource_texture.c 
b/src/gallium/drivers/svga/svga_resource_texture.c
index 9e4d6c9..71b8ebe 100644
--- a/src/gallium/drivers/svga/svga_resource_texture.c
+++ b/src/gallium/drivers/svga/svga_resource_texture.c
@@ -1325,21 +1325,21 @@ svga_texture_generate_mipmap(struct pipe_context *pipe,
  /* texture upload buffer default size in bytes */
  #define TEX_UPLOAD_DEFAULT_SIZE (1024 * 1024)
/**
   * Create a texture upload buffer
   */
  boolean
  svga_texture_transfer_map_upload_create(struct svga_context *svga)
  {
     svga->tex_upload = u_upload_create(&svga->pipe, TEX_UPLOAD_DEFAULT_SIZE,
-                                      0, PIPE_USAGE_STAGING);
+                                      0, PIPE_USAGE_STAGING, 0);
     return svga->tex_upload != NULL;
  }
/**
   * Destroy the texture upload buffer
   */
  void
  svga_texture_transfer_map_upload_destroy(struct svga_context *svga)
  {
diff --git a/src/gallium/drivers/virgl/virgl_context.c 
b/src/gallium/drivers/virgl/virgl_context.c
index 232d295..f1b6ef4 100644
--- a/src/gallium/drivers/virgl/virgl_context.c
+++ b/src/gallium/drivers/virgl/virgl_context.c
@@ -931,21 +931,21 @@ struct pipe_context *virgl_context_create(struct 
pipe_screen *pscreen,
virgl_init_context_resource_functions(&vctx->base);
     virgl_init_query_functions(vctx);
     virgl_init_so_functions(vctx);
list_inithead(&vctx->to_flush_bufs);
     slab_create_child(&vctx->texture_transfer_pool, 
&rs->texture_transfer_pool);
vctx->primconvert = util_primconvert_create(&vctx->base, rs->caps.caps.v1.prim_mask);
     vctx->uploader = u_upload_create(&vctx->base, 1024 * 1024,
-                                     PIPE_BIND_INDEX_BUFFER, 
PIPE_USAGE_STREAM);
+                                     PIPE_BIND_INDEX_BUFFER, 
PIPE_USAGE_STREAM, 0);
     if (!vctx->uploader)
             goto fail;
     vctx->base.stream_uploader = vctx->uploader;
     vctx->base.const_uploader = vctx->uploader;
vctx->hw_sub_ctx_id = rs->sub_ctx_id++;
     virgl_encoder_create_sub_ctx(vctx, vctx->hw_sub_ctx_id);
virgl_encoder_set_sub_ctx(vctx, vctx->hw_sub_ctx_id);
     return &vctx->base;



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to