u_upload_mgr: allow specifying PIPE_USAGE_* for the upload buffer
authorMarek Olšák <marek.olsak@amd.com>
Sat, 19 Dec 2015 16:54:31 +0000 (17:54 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Sat, 2 Jan 2016 14:15:45 +0000 (15:15 +0100)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
17 files changed:
src/gallium/auxiliary/hud/hud_context.c
src/gallium/auxiliary/indices/u_primconvert.c
src/gallium/auxiliary/util/u_blitter.c
src/gallium/auxiliary/util/u_upload_mgr.c
src/gallium/auxiliary/util/u_upload_mgr.h
src/gallium/auxiliary/util/u_vbuf.c
src/gallium/auxiliary/vl/vl_compositor.c
src/gallium/drivers/freedreno/a3xx/fd3_context.c
src/gallium/drivers/freedreno/a4xx/fd4_context.c
src/gallium/drivers/ilo/ilo_context.c
src/gallium/drivers/r300/r300_context.c
src/gallium/drivers/radeon/r600_pipe_common.c
src/gallium/drivers/svga/svga_context.c
src/gallium/drivers/vc4/vc4_context.c
src/gallium/drivers/virgl/virgl_context.c
src/gallium/state_trackers/nine/device9.c
src/mesa/state_tracker/st_context.c

index de019ebcb029376d55990413236f35f98911ad92..75afebe4919487b57aa060c938aee7a4bbd77250 100644 (file)
@@ -1177,7 +1177,7 @@ hud_create(struct pipe_context *pipe, struct cso_context *cso)
    hud->pipe = pipe;
    hud->cso = cso;
    hud->uploader = u_upload_create(pipe, 256 * 1024,
-                                   PIPE_BIND_VERTEX_BUFFER);
+                                   PIPE_BIND_VERTEX_BUFFER, PIPE_USAGE_STREAM);
 
    /* font */
    if (!util_font_create(pipe, UTIL_FONT_FIXED_8X13, &hud->font)) {
index e21174a608fe651c15ce4a4eafbe93a26b9624aa..5effd883f67f544bea60f895b069dae4538a69ac 100644 (file)
@@ -153,7 +153,8 @@ util_primconvert_draw_vbo(struct primconvert_context *pc,
    }
 
    if (!pc->upload) {
-      pc->upload = u_upload_create(pc->pipe, 4096, PIPE_BIND_INDEX_BUFFER);
+      pc->upload = u_upload_create(pc->pipe, 4096, PIPE_BIND_INDEX_BUFFER,
+                                   PIPE_USAGE_STREAM);
    }
 
    u_upload_alloc(pc->upload, 0, new_ib.index_size * new_info.count, 4,
index 833a79cf5de0b1e6d6ef8d3c69d9347b2960e49b..43fbd8e64521e5d3fb379c6bc5243f66064bf058 100644 (file)
@@ -320,7 +320,8 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
    for (i = 0; i < 4; i++)
       ctx->vertices[i][0][3] = 1; /*v.w*/
 
-   ctx->upload = u_upload_create(pipe, 65536, PIPE_BIND_VERTEX_BUFFER);
+   ctx->upload = u_upload_create(pipe, 65536, PIPE_BIND_VERTEX_BUFFER,
+                                 PIPE_USAGE_STREAM);
 
    return &ctx->base;
 }
index 842a7f68e2784066e032768f389f0ff82d0ffc29..aa31ef2a4bd835abb11249ba4ca56c5f430e0eba 100644 (file)
@@ -43,6 +43,7 @@ struct u_upload_mgr {
 
    unsigned default_size;  /* Minimum size of the upload buffer, in bytes. */
    unsigned bind;          /* Bitmask of PIPE_BIND_* flags. */
+   unsigned usage;         /* PIPE_USAGE_* */
    unsigned map_flags;     /* Bitmask of PIPE_TRANSFER_* flags. */
    boolean map_persistent; /* If persistent mappings are supported. */
 
@@ -54,9 +55,9 @@ struct u_upload_mgr {
 };
 
 
-struct u_upload_mgr *u_upload_create( struct pipe_context *pipe,
-                                      unsigned default_size,
-                                      unsigned bind )
+struct u_upload_mgr *
+u_upload_create(struct pipe_context *pipe, unsigned default_size,
+                unsigned bind, unsigned usage)
 {
    struct u_upload_mgr *upload = CALLOC_STRUCT( u_upload_mgr );
    if (!upload)
@@ -65,6 +66,7 @@ struct u_upload_mgr *u_upload_create( struct pipe_context *pipe,
    upload->pipe = pipe;
    upload->default_size = default_size;
    upload->bind = bind;
+   upload->usage = usage;
 
    upload->map_persistent =
       pipe->screen->get_param(pipe->screen,
@@ -146,7 +148,7 @@ u_upload_alloc_buffer(struct u_upload_mgr *upload,
    buffer.target = PIPE_BUFFER;
    buffer.format = PIPE_FORMAT_R8_UNORM; /* want TYPELESS or similar */
    buffer.bind = upload->bind;
-   buffer.usage = PIPE_USAGE_STREAM;
+   buffer.usage = upload->usage;
    buffer.width0 = size;
    buffer.height0 = 1;
    buffer.depth0 = 1;
index 54e839bbdff0249f5e56cebc6077ee95e1a4464d..1d933d754ae07434ceae10b84364524fc0e99e96 100644 (file)
@@ -44,10 +44,11 @@ struct pipe_resource;
  * \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 );
+struct u_upload_mgr *
+u_upload_create(struct pipe_context *pipe, unsigned default_size,
+                unsigned bind, unsigned usage);
 
 /**
  * Destroy the upload manager.
index 060f3d14eb924913663700396ac5d8952ceb9685..e16ee3651e6363b07a120b8c94e0874f063149cd 100644 (file)
@@ -315,7 +315,8 @@ u_vbuf_create(struct pipe_context *pipe,
    memset(mgr->fallback_vbs, ~0, sizeof(mgr->fallback_vbs));
 
    mgr->uploader = u_upload_create(pipe, 1024 * 1024,
-                                   PIPE_BIND_VERTEX_BUFFER);
+                                   PIPE_BIND_VERTEX_BUFFER,
+                                   PIPE_USAGE_STREAM);
 
    return mgr;
 }
index 10ac1712f19202616db93ea845e96cb8fd42ca54..77688f0f99f29b0c9b80c6ada0319d91121a1238 100644 (file)
@@ -1091,7 +1091,8 @@ vl_compositor_init(struct vl_compositor *c, struct pipe_context *pipe)
 
    c->pipe = pipe;
 
-   c->upload = u_upload_create(pipe, 128 * 1024, PIPE_BIND_VERTEX_BUFFER);
+   c->upload = u_upload_create(pipe, 128 * 1024, PIPE_BIND_VERTEX_BUFFER,
+                               PIPE_USAGE_STREAM);
 
    if (!c->upload)
       return false;
index edc716e25c8e55d64caf55052ac12ae0700ad5d9..e47bbff56437d4aeea1a785969a2d4d1db96c2e8 100644 (file)
@@ -171,7 +171,8 @@ fd3_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
 
        fd3_query_context_init(pctx);
 
-       fd3_ctx->border_color_uploader = u_upload_create(pctx, 4096, 0);
+       fd3_ctx->border_color_uploader = u_upload_create(pctx, 4096, 0,
+                                                         PIPE_USAGE_STREAM);
 
        return pctx;
 }
index f074a01b88640568660bcd43c90f30d3289a0e26..7d6365bbb6da52b42b0f556eb0434721ad895bc6 100644 (file)
@@ -171,7 +171,8 @@ fd4_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
 
        fd4_query_context_init(pctx);
 
-       fd4_ctx->border_color_uploader = u_upload_create(pctx, 4096, 0);
+       fd4_ctx->border_color_uploader = u_upload_create(pctx, 4096, 0,
+                                                         PIPE_USAGE_STREAM);
 
        return pctx;
 }
index 6c885b1bf83f3e5da3ddbe3c89965c1aa5b324b4..6bcd0bcb8f57a4b44c7b75c95624dcedbf8a02ab 100644 (file)
@@ -190,7 +190,8 @@ ilo_context_create(struct pipe_screen *screen, void *priv, unsigned flags)
     * context.
     */
    ilo->uploader = u_upload_create(&ilo->base, 1024 * 1024,
-         PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_INDEX_BUFFER);
+         PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_INDEX_BUFFER,
+                                   PIPE_USAGE_STREAM);
    if (!ilo->uploader) {
       ilo_context_destroy(&ilo->base);
       return NULL;
index ea47c3fff5bfbe8fba119ec5c1e42b8029428daa..82ba0435118c6d61f3a4e4bef4155c0f81bd9631 100644 (file)
@@ -422,7 +422,7 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
     r300->context.create_video_buffer = vl_video_buffer_create;
 
     r300->uploader = u_upload_create(&r300->context, 256 * 1024,
-                                     PIPE_BIND_CUSTOM);
+                                     PIPE_BIND_CUSTOM, PIPE_USAGE_STREAM);
 
     r300->blitter = util_blitter_create(&r300->context);
     if (r300->blitter == NULL)
index 7d9712093059446e4c06769f404107e616d94434..0ab4a60a91924018f8be86708edca20cca24780b 100644 (file)
@@ -274,7 +274,7 @@ bool r600_common_context_init(struct r600_common_context *rctx,
 
        rctx->uploader = u_upload_create(&rctx->b, 1024 * 1024,
                                        PIPE_BIND_INDEX_BUFFER |
-                                       PIPE_BIND_CONSTANT_BUFFER);
+                                       PIPE_BIND_CONSTANT_BUFFER, PIPE_USAGE_STREAM);
        if (!rctx->uploader)
                return false;
 
index 460804ccd9df553e9fbdeb9e202a9bb412e4d798..b10eb45e54861adb83cfc76fdc5a7428f2a89dcb 100644 (file)
@@ -219,7 +219,8 @@ struct pipe_context *svga_context_create(struct pipe_screen *screen,
 
    svga->const0_upload = u_upload_create(&svga->pipe,
                                          CONST0_UPLOAD_DEFAULT_SIZE,
-                                         PIPE_BIND_CONSTANT_BUFFER);
+                                         PIPE_BIND_CONSTANT_BUFFER,
+                                         PIPE_USAGE_STREAM);
    if (!svga->const0_upload)
       goto cleanup;
 
index 59c01d86658535ba2784d60a76f6786bcdda57e1..a0888f232656231f92e809850b19e1d65bf5cfd1 100644 (file)
@@ -255,7 +255,8 @@ vc4_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
                 goto fail;
 
         vc4->uploader = u_upload_create(pctx, 16 * 1024,
-                                        PIPE_BIND_INDEX_BUFFER);
+                                        PIPE_BIND_INDEX_BUFFER,
+                                        PIPE_USAGE_STREAM);
 
         vc4_debug |= saved_shaderdb_flag;
 
index 6e74e9a07bc21e7f33ced15f15fdbb06b4b8e9c0..c322503d81630141c9b13ed1de8f98e83a14c768 100644 (file)
@@ -949,7 +949,7 @@ struct pipe_context *virgl_context_create(struct pipe_screen *pscreen,
 
    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_BIND_INDEX_BUFFER, PIPE_USAGE_STREAM);
    if (!vctx->uploader)
            goto fail;
 
index 3d3f505a82720b68e846c41103e8aa2ac0c92ae0..0be8365892874dfe811fba78b823cef84a58f48f 100644 (file)
@@ -393,13 +393,15 @@ NineDevice9_ctor( struct NineDevice9 *This,
     This->driver_caps.user_cbufs = GET_PCAP(USER_CONSTANT_BUFFERS);
 
     if (!This->driver_caps.user_vbufs)
-        This->vertex_uploader = u_upload_create(This->pipe, 65536, PIPE_BIND_VERTEX_BUFFER);
+        This->vertex_uploader = u_upload_create(This->pipe, 65536,
+                                                PIPE_BIND_VERTEX_BUFFER, PIPE_USAGE_STREAM);
     if (!This->driver_caps.user_ibufs)
-        This->index_uploader = u_upload_create(This->pipe, 128 * 1024, PIPE_BIND_INDEX_BUFFER);
+        This->index_uploader = u_upload_create(This->pipe, 128 * 1024,
+                                               PIPE_BIND_INDEX_BUFFER, PIPE_USAGE_STREAM);
     if (!This->driver_caps.user_cbufs) {
         This->constbuf_alignment = GET_PCAP(CONSTANT_BUFFER_OFFSET_ALIGNMENT);
         This->constbuf_uploader = u_upload_create(This->pipe, This->vs_const_size,
-                                                  PIPE_BIND_CONSTANT_BUFFER);
+                                                  PIPE_BIND_CONSTANT_BUFFER, PIPE_USAGE_STREAM);
     }
 
     This->driver_caps.window_space_position_support = GET_PCAP(TGSI_VS_WINDOW_SPACE_POSITION);
index 4f6d379723f55e38463c8df111d4ef1180863295..2fb792d628f5002593fca144b323629a5deca638 100644 (file)
@@ -172,16 +172,19 @@ st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe,
    /* Create upload manager for vertex data for glBitmap, glDrawPixels,
     * glClear, etc.
     */
-   st->uploader = u_upload_create(st->pipe, 65536, PIPE_BIND_VERTEX_BUFFER);
+   st->uploader = u_upload_create(st->pipe, 65536, PIPE_BIND_VERTEX_BUFFER,
+                                  PIPE_USAGE_STREAM);
 
    if (!screen->get_param(screen, PIPE_CAP_USER_INDEX_BUFFERS)) {
       st->indexbuf_uploader = u_upload_create(st->pipe, 128 * 1024,
-                                              PIPE_BIND_INDEX_BUFFER);
+                                              PIPE_BIND_INDEX_BUFFER,
+                                              PIPE_USAGE_STREAM);
    }
 
    if (!screen->get_param(screen, PIPE_CAP_USER_CONSTANT_BUFFERS))
       st->constbuf_uploader = u_upload_create(pipe, 128 * 1024,
-                                              PIPE_BIND_CONSTANT_BUFFER);
+                                              PIPE_BIND_CONSTANT_BUFFER,
+                                              PIPE_USAGE_STREAM);
 
    st->cso_context = cso_create_context(pipe);