i965: Don't write a counter snapshot on EndTransformFeedback if paused.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 9 May 2016 05:48:02 +0000 (22:48 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 21 May 2016 02:55:40 +0000 (19:55 -0700)
If the transform feedback object is paused, then we've already written
an ending counter snapshot.  We don't want to write another one.

This fixes assertions in GL33-CTS.transform_feedback.api_errors_test,
which calls EndTransformfeedback after PauseTransformFeedback.  On the
next BeginTransformFeedback, we tried to tally up the results, and saw
an odd number of snapshots (due to the double-end), and tripped an
assertion.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/dri/i965/gen7_sol_state.c

index d8dbc5f6b2ff60ea37204f69372ded5bfc7c7562..f7b14438a2217863e66db979eee80aa1f5380985 100644 (file)
@@ -485,7 +485,8 @@ gen7_end_transform_feedback(struct gl_context *ctx,
       (struct brw_transform_feedback_object *) obj;
 
    /* Store the ending value of the SO_NUM_PRIMS_WRITTEN counters. */
-   gen7_save_primitives_written_counters(brw, brw_obj);
+   if (!obj->Paused)
+      gen7_save_primitives_written_counters(brw, brw_obj);
 
    /* EndTransformFeedback() means that we need to update the number of
     * vertices written.  Since it's only necessary if DrawTransformFeedback()