swr: conditionally validate vertex buffer state
authorBruce Cherniak <bruce.cherniak@intel.com>
Tue, 27 Jun 2017 22:49:06 +0000 (17:49 -0500)
committerTim Rowley <timothy.o.rowley@intel.com>
Thu, 29 Jun 2017 18:23:33 +0000 (13:23 -0500)
Vertex buffer state doesn't need to be validated on every call,
only on dirty _NEW_VERTEX or indexed draws.

Unconditional validation was introduced as part of patch 330d0607ed6,
"remove pipe_index_buffer and set_index_buffer", with the expectation
we'd optimize later.

Reviewed-by: Tim Rowley <timothy.o.rowley@intel.com>
src/gallium/drivers/swr/swr_state.cpp

index f65e6427534052f02ca9f9122e1491481de80e02..6dc06ed15638d98e3b9c11d450a7c946d4ff5c09 100644 (file)
@@ -1212,12 +1212,13 @@ swr_update_derived(struct pipe_context *pipe,
       SwrSetViewports(ctx->swrContext, 1, vp, vpm);
    }
 
-   /* Set vertex & index buffers */
-   /* (using draw info if called by swr_draw_vbo) */
-   /* TODO: This is always true, because the index buffer comes from
+   /* Set vertex & index buffers
+    * (using draw info if called by swr_draw_vbo)
+    * If indexed draw, revalidate since index buffer comes from
     * pipe_draw_info.
     */
-   if (1 || ctx->dirty & SWR_NEW_VERTEX) {
+   if (ctx->dirty & SWR_NEW_VERTEX ||
+      (p_draw_info && p_draw_info->index_size)) {
       uint32_t scratch_total;
       uint8_t *scratch = NULL;