st/mesa: unify common code in st_draw_vbo functions
authorMarek Olšák <marek.olsak@amd.com>
Mon, 8 May 2017 00:11:31 +0000 (02:11 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 10 May 2017 17:29:08 +0000 (19:29 +0200)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/mesa/state_tracker/st_draw.c

index 78aabb089621755979fa34d2c02e995ce687041e..15c5b80f2912108ba325854fbcbb358f6e21c351 100644 (file)
@@ -124,6 +124,23 @@ translate_prim(const struct gl_context *ctx, unsigned prim)
    return prim;
 }
 
+static inline void
+prepare_draw(struct st_context *st, struct gl_context *ctx)
+{
+   /* Mesa core state should have been validated already */
+   assert(ctx->NewState == 0x0);
+
+   if (unlikely(!st->bitmap.cache.empty))
+      st_flush_bitmap_cache(st);
+
+   st_invalidate_readpix_cache(st);
+
+   /* Validate state. */
+   if ((st->dirty | ctx->NewDriverState) & ST_PIPELINE_RENDER_STATE_MASK ||
+       st->gfx_shaders_may_be_dirty) {
+      st_validate_state(st, ST_PIPELINE_RENDER);
+   }
+}
 
 /**
  * This function gets plugged into the VBO module and is called when
@@ -148,23 +165,10 @@ st_draw_vbo(struct gl_context *ctx,
    unsigned i;
    unsigned start = 0;
 
-   /* Mesa core state should have been validated already */
-   assert(ctx->NewState == 0x0);
-
-   if (unlikely(!st->bitmap.cache.empty))
-      st_flush_bitmap_cache(st);
-
-   st_invalidate_readpix_cache(st);
-
-   /* Validate state. */
-   if ((st->dirty | ctx->NewDriverState) & ST_PIPELINE_RENDER_STATE_MASK ||
-       st->gfx_shaders_may_be_dirty) {
-      st_validate_state(st, ST_PIPELINE_RENDER);
-   }
+   prepare_draw(st, ctx);
 
-   if (st->vertex_array_out_of_memory) {
+   if (st->vertex_array_out_of_memory)
       return;
-   }
 
    /* Initialize pipe_draw_info. */
    info.primitive_restart = false;
@@ -253,21 +257,11 @@ st_indirect_draw_vbo(struct gl_context *ctx,
    struct pipe_draw_info info;
    struct pipe_draw_indirect_info indirect;
 
-   /* Mesa core state should have been validated already */
-   assert(ctx->NewState == 0x0);
    assert(stride);
+   prepare_draw(st, ctx);
 
-   st_invalidate_readpix_cache(st);
-
-   /* Validate state. */
-   if ((st->dirty | ctx->NewDriverState) & ST_PIPELINE_RENDER_STATE_MASK ||
-       st->gfx_shaders_may_be_dirty) {
-      st_validate_state(st, ST_PIPELINE_RENDER);
-   }
-
-   if (st->vertex_array_out_of_memory) {
+   if (st->vertex_array_out_of_memory)
       return;
-   }
 
    memset(&indirect, 0, sizeof(indirect));
    util_draw_init_info(&info);