i965/gen7.5: Allow HW primitive restart for all primitive types.
authorPaul Berry <stereotype441@gmail.com>
Sat, 6 Apr 2013 03:15:39 +0000 (20:15 -0700)
committerPaul Berry <stereotype441@gmail.com>
Tue, 9 Apr 2013 22:37:36 +0000 (15:37 -0700)
Gen7.5 (Haswell) hardware supports primitive restart for all primitive
types.  It also handles all possible primitive restart indices.
Rather than specialize both can_cut_index_handle_restart_index() and
the switch statement in can_cut_index_handle_prims() for Haswell, just
return early if the hardware is Haswell because we know it can handle
everything.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_primitive_restart.c

index e6902b485c6defa38ee58d0fe08e8de66cfbb7b6..10581b3b36c77f2d2f9d8ea61d354c530d906e23 100644 (file)
 
 /**
  * Check if the hardware's cut index support can handle the primitive
- * restart index value.
+ * restart index value (pre-Haswell only).
  */
 static bool
 can_cut_index_handle_restart_index(struct gl_context *ctx,
                                    const struct _mesa_index_buffer *ib)
 {
-   struct intel_context *intel = intel_context(ctx);
-
-   /* Haswell supports an arbitrary cut index. */
-   if (intel->is_haswell)
-      return true;
-
    bool cut_index_will_work;
 
    switch (ib->type) {
@@ -78,6 +72,7 @@ can_cut_index_handle_prims(struct gl_context *ctx,
                            GLuint nr_prims,
                            const struct _mesa_index_buffer *ib)
 {
+   struct intel_context *intel = intel_context(ctx);
    struct brw_context *brw = brw_context(ctx);
 
    if (brw->sol.counting_primitives_generated ||
@@ -90,6 +85,10 @@ can_cut_index_handle_prims(struct gl_context *ctx,
       return false;
    }
 
+   /* Otherwise Haswell can do it all. */
+   if (intel->is_haswell)
+      return true;
+
    if (!can_cut_index_handle_restart_index(ctx, ib)) {
       /* The primitive restart index can't be handled, so take
        * the software path