radeonsi: add si_context::num_vertex_elements
authorMarek Olšák <marek.olsak@amd.com>
Tue, 7 Jan 2020 23:10:38 +0000 (18:10 -0500)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 13 Jan 2020 20:57:07 +0000 (15:57 -0500)
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
src/gallium/drivers/radeonsi/si_descriptors.c
src/gallium/drivers/radeonsi/si_pipe.h
src/gallium/drivers/radeonsi/si_state.c

index 76695baa4c3bffe94bbc5b9410c45c3ca0634003..642a22ccfa603e5d10d02c76c9f90b5ab595f048 100644 (file)
@@ -1070,7 +1070,7 @@ static void si_get_buffer_from_descriptors(struct si_buffer_resources *buffers,
 
 static void si_vertex_buffers_begin_new_cs(struct si_context *sctx)
 {
-       int count = sctx->vertex_elements ? sctx->vertex_elements->count : 0;
+       int count = sctx->num_vertex_elements;
        int i;
 
        for (i = 0; i < count; i++) {
@@ -1095,18 +1095,13 @@ static void si_vertex_buffers_begin_new_cs(struct si_context *sctx)
 
 bool si_upload_vertex_buffer_descriptors(struct si_context *sctx)
 {
-       struct si_vertex_elements *velems = sctx->vertex_elements;
-       unsigned i, count;
+       unsigned i, count = sctx->num_vertex_elements;
        uint32_t *ptr;
 
-       if (!sctx->vertex_buffers_dirty || !velems)
-               return true;
-
-       count = velems->count;
-
-       if (!count)
+       if (!sctx->vertex_buffers_dirty || !count)
                return true;
 
+       struct si_vertex_elements *velems = sctx->vertex_elements;
        unsigned alloc_size = velems->vb_desc_list_alloc_size;
        unsigned first_vb_use_mask = velems->first_vb_use_mask;
 
@@ -1667,8 +1662,7 @@ void si_rebind_buffer(struct si_context *sctx, struct pipe_resource *buf)
 {
        struct si_resource *buffer = si_resource(buf);
        unsigned i, shader;
-       unsigned num_elems = sctx->vertex_elements ?
-                                      sctx->vertex_elements->count : 0;
+       unsigned num_elems = sctx->num_vertex_elements;
 
        /* We changed the buffer, now we need to bind it where the old one
         * was bound. This consists of 2 things:
index f78ab7aa2baa8dde13d5d33b04722b103ad16033..14768f02384e3db952b4f79d59ec924ffabdae90 100644 (file)
@@ -1000,6 +1000,7 @@ struct si_context {
 
        /* shader information */
        struct si_vertex_elements       *vertex_elements;
+       unsigned                        num_vertex_elements;
        unsigned                        sprite_coord_enable;
        unsigned                        cs_max_waves_per_sh;
        bool                            flatshade;
index 6b3a3a3be6b35c71579d362c4f88def6771de9a3..2c1638930f324b14a829fa7e907b3ab6ec9d7a75 100644 (file)
@@ -5074,6 +5074,7 @@ static void si_bind_vertex_elements(struct pipe_context *ctx, void *state)
        struct si_vertex_elements *v = (struct si_vertex_elements*)state;
 
        sctx->vertex_elements = v;
+       sctx->num_vertex_elements = v ? v->count : 0;
        sctx->vertex_buffers_dirty = true;
 
        if (v &&