i965: stop using "indirect" parameter from Driver.Draw (non-indirect)
authorMarek Olšák <marek.olsak@amd.com>
Tue, 11 Feb 2020 00:54:44 +0000 (19:54 -0500)
committerMarge Bot <eric+marge@anholt.net>
Fri, 28 Feb 2020 00:53:45 +0000 (00:53 +0000)
The parameter will be removed.

v2: added UNUSED, removed "!!"

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3990>

src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_draw.c
src/mesa/drivers/dri/i965/brw_draw.h
src/mesa/drivers/dri/i965/brw_primitive_restart.c

index 754d651d190b0579aab2635331da54318d44e768..ecd40afc567c34d7520b52f0852b4d8330e4e08b 100644 (file)
@@ -907,6 +907,11 @@ struct brw_context
        */
       struct brw_bo *draw_params_count_bo;
       uint32_t draw_params_count_offset;
+
+      /**
+       * Draw indirect buffer.
+       */
+      struct gl_buffer_object *draw_indirect_data;
    } draw;
 
    struct {
index 3f705bce6ac034bf78acc068d2fb84c826b69887..92c57742d75b854b8c7c51edac715ee941239942 100644 (file)
@@ -956,12 +956,12 @@ brw_draw_single_prim(struct gl_context *ctx,
                      const struct _mesa_prim *prim,
                      unsigned prim_id,
                      struct brw_transform_feedback_object *xfb_obj,
-                     unsigned stream,
-                     struct gl_buffer_object *indirect)
+                     unsigned stream)
 {
    struct brw_context *brw = brw_context(ctx);
    const struct gen_device_info *devinfo = &brw->screen->devinfo;
    bool fail_next;
+   bool is_indirect = brw->draw.draw_indirect_data != NULL;
 
    /* Flag BRW_NEW_DRAW_CALL on every draw.  This allows us to have
     * atoms that happen on every draw call.
@@ -1003,7 +1003,7 @@ brw_draw_single_prim(struct gl_context *ctx,
          vs_prog_data->uses_firstvertex ||
          vs_prog_data->uses_baseinstance;
 
-      if ((uses_draw_parameters && indirect) ||
+      if ((uses_draw_parameters && is_indirect) ||
           (vs_prog_data->uses_firstvertex &&
            brw->draw.params.firstvertex != new_firstvertex) ||
           (vs_prog_data->uses_baseinstance &&
@@ -1015,7 +1015,7 @@ brw_draw_single_prim(struct gl_context *ctx,
    brw->draw.params.gl_baseinstance = new_baseinstance;
    brw_bo_unreference(brw->draw.draw_params_bo);
 
-   if (indirect) {
+   if (is_indirect) {
       /* Point draw_params_bo at the indirect buffer. */
       brw->draw.draw_params_bo =
          intel_buffer_object(ctx->DrawIndirectBuffer)->buffer;
@@ -1066,7 +1066,7 @@ retry:
    if (devinfo->gen == 9)
       gen9_emit_preempt_wa(brw, prim);
 
-   brw_emit_prim(brw, prim, brw->primitive, xfb_obj, stream, !!indirect);
+   brw_emit_prim(brw, prim, brw->primitive, xfb_obj, stream, is_indirect);
 
    brw->batch.no_wrap = false;
 
@@ -1105,7 +1105,7 @@ brw_draw_prims(struct gl_context *ctx,
                GLuint max_index,
                struct gl_transform_feedback_object *gl_xfb_obj,
                unsigned stream,
-               struct gl_buffer_object *indirect)
+               UNUSED struct gl_buffer_object *unused_indirect)
 {
    unsigned i;
    struct brw_context *brw = brw_context(ctx);
@@ -1117,7 +1117,7 @@ brw_draw_prims(struct gl_context *ctx,
       return;
 
    /* Handle primitive restart if needed */
-   if (brw_handle_primitive_restart(ctx, prims, nr_prims, ib, indirect)) {
+   if (brw_handle_primitive_restart(ctx, prims, nr_prims, ib)) {
       /* The draw was handled, so we can exit now */
       return;
    }
@@ -1183,7 +1183,7 @@ brw_draw_prims(struct gl_context *ctx,
          brw->predicate.state = BRW_PREDICATE_STATE_USE_BIT;
       }
 
-      brw_draw_single_prim(ctx, &prims[i], i, xfb_obj, stream, indirect);
+      brw_draw_single_prim(ctx, &prims[i], i, xfb_obj, stream);
    }
 
    brw_finish_drawing(ctx);
@@ -1230,11 +1230,14 @@ brw_draw_indirect_prims(struct gl_context *ctx,
       brw->draw.draw_params_count_offset = indirect_params_offset;
    }
 
+   brw->draw.draw_indirect_data = indirect_data;
+
    brw_draw_prims(ctx, prim, draw_count,
                   ib, false, 0, ~0,
                   NULL, 0,
-                  indirect_data);
+                  NULL);
 
+   brw->draw.draw_indirect_data = NULL;
    free(prim);
 }
 
index c74a2536aa1d6891f57d41450a020cb8798bbf08..1e111fe74319284bed6264ac03bde7779d21b895 100644 (file)
@@ -66,8 +66,7 @@ GLboolean
 brw_handle_primitive_restart(struct gl_context *ctx,
                              const struct _mesa_prim *prims,
                              GLuint nr_prims,
-                             const struct _mesa_index_buffer *ib,
-                             struct gl_buffer_object *indirect);
+                             const struct _mesa_index_buffer *ib);
 
 void
 brw_draw_indirect_prims(struct gl_context *ctx,
index 3b696aa9cbc3f5b0d6bda8cb878cf5171821d423..4e4aeeb0a80fd4b9606370acdd667ff646551103 100644 (file)
@@ -130,8 +130,7 @@ GLboolean
 brw_handle_primitive_restart(struct gl_context *ctx,
                              const struct _mesa_prim *prims,
                              GLuint nr_prims,
-                             const struct _mesa_index_buffer *ib,
-                             struct gl_buffer_object *indirect)
+                             const struct _mesa_index_buffer *ib)
 {
    struct brw_context *brw = brw_context(ctx);
 
@@ -164,13 +163,18 @@ brw_handle_primitive_restart(struct gl_context *ctx,
        */
       brw->prim_restart.enable_cut_index = true;
       brw_draw_prims(ctx, prims, nr_prims, ib, GL_FALSE, -1, -1, NULL, 0,
-                     indirect);
+                     NULL);
       brw->prim_restart.enable_cut_index = false;
    } else {
       /* Not all the primitive draw modes are supported by the cut index,
        * so take the software path
        */
-      vbo_sw_primitive_restart(ctx, prims, nr_prims, ib, indirect);
+      struct gl_buffer_object *indirect_data = brw->draw.draw_indirect_data;
+
+      /* Clear this to make the draw direct. */
+      brw->draw.draw_indirect_data = NULL;
+
+      vbo_sw_primitive_restart(ctx, prims, nr_prims, ib, indirect_data);
    }
 
    brw->prim_restart.in_progress = false;