[Mesa-dev] [PATCH 06/11] gallium/blitter: use the common uploader

Marek Olšák maraeo at gmail.com
Thu Feb 9 00:11:07 UTC 2017


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

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
Tested-by: Edmondo Tommasina <edmondo.tommasina at gmail.com>
---
 src/gallium/auxiliary/util/u_blitter.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
index 45dc033..447d8d2 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -54,22 +54,20 @@
 #define GET_CLEAR_BLEND_STATE_IDX(clear_buffers) \
    ((clear_buffers) / PIPE_CLEAR_COLOR0)
 
 #define NUM_RESOLVE_FRAG_SHADERS 5 /* MSAA 2x, 4x, 8x, 16x, 32x */
 #define GET_MSAA_RESOLVE_FS_IDX(nr_samples) (util_logbase2(nr_samples)-1)
 
 struct blitter_context_priv
 {
    struct blitter_context base;
 
-   struct u_upload_mgr *upload;
-
    float vertices[4][2][4];   /**< {pos, color} or {pos, texcoord} */
 
    /* Templates for various state objects. */
 
    /* Constant state objects. */
    /* Vertex shaders. */
    void *vs; /**< Vertex shader which passes {pos, generic} to the output.*/
    void *vs_pos_only[4]; /**< Vertex shader which passes pos to the output.*/
    void *vs_layered; /**< Vertex shader which sets LAYER = INSTANCEID. */
 
@@ -309,23 +307,20 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
    }
 
    ctx->has_layered =
       pipe->screen->get_param(pipe->screen, PIPE_CAP_TGSI_INSTANCEID) &&
       pipe->screen->get_param(pipe->screen, PIPE_CAP_TGSI_VS_LAYER_VIEWPORT);
 
    /* set invariant vertex coordinates */
    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,
-                                 PIPE_USAGE_STREAM);
-
    return &ctx->base;
 }
 
 static void bind_vs_pos_only(struct blitter_context_priv *ctx,
                              unsigned num_so_channels)
 {
    struct pipe_context *pipe = ctx->base.pipe;
    int index = num_so_channels ? num_so_channels - 1 : 0;
 
    if (!ctx->vs_pos_only[index]) {
@@ -484,21 +479,20 @@ void util_blitter_destroy(struct blitter_context *blitter)
       ctx->delete_fs_state(pipe, ctx->fs_empty);
    if (ctx->fs_write_one_cbuf)
       ctx->delete_fs_state(pipe, ctx->fs_write_one_cbuf);
    if (ctx->fs_write_all_cbufs)
       ctx->delete_fs_state(pipe, ctx->fs_write_all_cbufs);
 
    pipe->delete_sampler_state(pipe, ctx->sampler_state_rect_linear);
    pipe->delete_sampler_state(pipe, ctx->sampler_state_rect);
    pipe->delete_sampler_state(pipe, ctx->sampler_state_linear);
    pipe->delete_sampler_state(pipe, ctx->sampler_state);
-   u_upload_destroy(ctx->upload);
    FREE(ctx);
 }
 
 void util_blitter_set_texture_multisample(struct blitter_context *blitter,
                                           boolean supported)
 {
    struct blitter_context_priv *ctx = (struct blitter_context_priv*)blitter;
 
    ctx->has_texture_multisample = supported;
 }
@@ -1207,25 +1201,25 @@ static void blitter_draw(struct blitter_context_priv *ctx,
                          int x1, int y1, int x2, int y2, float depth,
                          unsigned num_instances)
 {
    struct pipe_context *pipe = ctx->base.pipe;
    struct pipe_vertex_buffer vb = {0};
 
    blitter_set_rectangle(ctx, x1, y1, x2, y2, depth);
 
    vb.stride = 8 * sizeof(float);
 
-   u_upload_data(ctx->upload, 0, sizeof(ctx->vertices), 4, ctx->vertices,
+   u_upload_data(pipe->stream_uploader, 0, sizeof(ctx->vertices), 4, ctx->vertices,
                  &vb.buffer_offset, &vb.buffer);
    if (!vb.buffer)
       return;
-   u_upload_unmap(ctx->upload);
+   u_upload_unmap(pipe->stream_uploader);
 
    pipe->set_vertex_buffers(pipe, ctx->base.vb_slot, 1, &vb);
    util_draw_arrays_instanced(pipe, PIPE_PRIM_TRIANGLE_FAN, 0, 4,
                               0, num_instances);
    pipe_resource_reference(&vb.buffer, NULL);
 }
 
 void util_blitter_draw_rectangle(struct blitter_context *blitter,
                                  int x1, int y1, int x2, int y2, float depth,
                                  enum blitter_attrib_type type,
@@ -2257,21 +2251,21 @@ void util_blitter_clear_buffer(struct blitter_context *blitter,
       assert(!"Streamout unsupported in util_blitter_clear_buffer()");
       return;
    }
 
    /* Some alignment is required. */
    if (offset % 4 != 0 || size % 4 != 0) {
       assert(!"Bad alignment in util_blitter_clear_buffer()");
       return;
    }
 
-   u_upload_data(ctx->upload, 0, num_channels*4, 4, clear_value,
+   u_upload_data(pipe->stream_uploader, 0, num_channels*4, 4, clear_value,
                  &vb.buffer_offset, &vb.buffer);
    if (!vb.buffer)
       goto out;
 
    vb.stride = 0;
 
    util_blitter_set_running_flag(blitter);
    blitter_check_saved_vertex_states(ctx);
    blitter_disable_render_cond(ctx);
 
-- 
2.7.4



More information about the mesa-dev mailing list