diff options
author | Kenneth Graunke <[email protected]> | 2017-02-16 21:24:20 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2017-02-21 12:38:13 -0800 |
commit | 0235757422d825c37ca2d2c3feb9e58a28deedd4 (patch) | |
tree | 281a834df0ac54197ddd751bc97af8c1842060e8 /src/mesa/drivers/dri/i965/brw_context.c | |
parent | eb0331382aab7322380c330b015dca2d54ca2881 (diff) |
i965: Properly reset SVBI counters on ResumeTransformFeedback().
This fixes Piglit's ARB_transform_feedback2/change-objects-while-paused
GLES 3.0 test. When resuming the transform feedback object, we need to
reset the SVBI counters so we continue writing at the correct point in
the buffer.
Instead of SO_WRITE_OFFSET counters (with a DWord offset), we have the
Streamed Vertex Buffer Index (SVBI) counters, which contain a count of
vertices emitted.
Unfortunately, there's no straightforward way to store the current SVBI
counter values to a buffer. They're not available in a register. You
can use a bit in the 3DSTATE_SVB_INDEX packet to copy them to another
internal counter which 3DPRIMITIVE can use...but there's no good way to
extract that either.
So, once again, we use SO_NUM_PRIMS_WRITTEN to calculate the vertex
numbers. Thankfully, we can reuse most of the existing Gen7+ code.
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Iago Toral Quiroga <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_context.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index c56a14e3d66..6a9f1570c31 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -481,6 +481,8 @@ brw_init_driver_functions(struct brw_context *brw, } else { functions->BeginTransformFeedback = brw_begin_transform_feedback; functions->EndTransformFeedback = brw_end_transform_feedback; + functions->PauseTransformFeedback = brw_pause_transform_feedback; + functions->ResumeTransformFeedback = brw_resume_transform_feedback; } if (brw->gen >= 6) |