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; _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev