[Mesa-dev] [PATCH 2/7] i965/gen7: Make primitives_written counting work.
Kenneth Graunke
kenneth at whitecape.org
Thu Dec 22 17:39:07 PST 2011
On 12/22/2011 04:54 PM, Eric Anholt wrote:
> The code was relying on gs.prog_data's copy of the
> number-of-verts-per-prim, which segfaulted on gen7 since it doesn't
> make a GS program. We can easily calculate that value right here.
> ---
> src/mesa/drivers/dri/i965/brw_draw.c | 33 +++++++++++++++++++++++++++------
> 1 files changed, 27 insertions(+), 6 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
> index 082bb9a..c116d39 100644
> --- a/src/mesa/drivers/dri/i965/brw_draw.c
> +++ b/src/mesa/drivers/dri/i965/brw_draw.c
> @@ -379,6 +379,30 @@ static void brw_postdraw_set_buffers_need_resolve(struct brw_context *brw)
> }
> }
>
> +static int
> +verts_per_prim(GLenum mode)
> +{
> + switch (mode) {
> + case GL_POINTS:
> + return 1;
> + case GL_LINE_STRIP:
> + case GL_LINE_LOOP:
> + case GL_LINES:
> + return 2;
> + case GL_TRIANGLE_STRIP:
> + case GL_TRIANGLE_FAN:
> + case GL_POLYGON:
> + case GL_TRIANGLES:
> + case GL_QUADS:
> + case GL_QUAD_STRIP:
> + return 3;
> + default:
> + _mesa_problem(NULL,
> + "unknown prim type in transform feedback primitive count");
> + return 0;
> + }
> +}
> +
> /**
> * Update internal counters based on the the drawing operation described in
> * prim.
> @@ -397,14 +421,11 @@ brw_update_primitive_count(struct brw_context *brw,
> * able to reload SVBI 0 with the correct value in case we have to start
> * a new batch buffer.
> */
> - unsigned svbi_postincrement_value =
> - brw->gs.prog_data->svbi_postincrement_value;
> + unsigned verts = verts_per_prim(prim->mode);
> uint32_t space_avail =
> - (brw->sol.svbi_0_max_index - brw->sol.svbi_0_starting_index)
> - / svbi_postincrement_value;
> + (brw->sol.svbi_0_max_index - brw->sol.svbi_0_starting_index) / verts;
> uint32_t primitives_written = MIN2 (space_avail, count);
> - brw->sol.svbi_0_starting_index +=
> - svbi_postincrement_value * primitives_written;
> + brw->sol.svbi_0_starting_index += verts;
Don't you mean
brw->sol.svbi_0_starting_index += verts * primitives_written;
> /* And update the TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN query. */
> brw->sol.primitives_written += primitives_written;
More information about the mesa-dev
mailing list