mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 09:18:04 +02:00
i965/gen7: Make primitives_written counting work.
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. v2: Fix svbi_0_starting_index regression. Reviewed-by: Paul Berry <stereotype441@gmail.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
bf2a93db4d
commit
43e0d77597
1 changed files with 27 additions and 6 deletions
|
|
@ -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.
|
||||
|
|
@ -398,14 +422,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 * primitives_written;
|
||||
|
||||
/* And update the TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN query. */
|
||||
brw->sol.primitives_written += primitives_written;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue