[Mesa-dev] [PATCH 08/15] i965: Reserve space for "Vertex Count" in GS outputs.
Kenneth Graunke
kenneth at whitecape.org
Sat Nov 30 13:14:29 PST 2013
On 11/30/2013 10:29 AM, Paul Berry wrote:
> On 12 November 2013 17:51, Kenneth Graunke <kenneth at whitecape.org
> <mailto:kenneth at whitecape.org>> wrote:
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org
> <mailto:kenneth at whitecape.org>>
> ---
> src/mesa/drivers/dri/i965/brw_vec4_gs.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs.c
> b/src/mesa/drivers/dri/i965/brw_vec4_gs.c
> index b52d646..e802c1e 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_gs.c
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs.c
> @@ -194,6 +194,12 @@ do_gs_prog(struct brw_context *brw,
> c.prog_data.output_vertex_size_hwords * 32 *
> gp->program.VerticesOut;
> output_size_bytes += 32 *
> c.prog_data.control_data_header_size_hwords;
>
> + /* Broadwell stores "Vertex Count" as a full 8 DWord (32 byte)
> URB output,
> + * which comes before the conttrol header.
> + */
> + if (brw->gen >= 8)
> + output_size_bytes += 32;
> +
> assert(output_size_bytes >= 1);
> if (output_size_bytes > GEN7_MAX_GS_URB_ENTRY_SIZE_BYTES)
> return false;
> --
> 1.8.3.2
>
>
> It looks like changes also need to be made to
> vec4_gs_visitor::emit_urb_write_opcode() and
> vec4_gs_visitor::emit_control_data_bits() to offset the vertex data and
> control data by 32 bytes, and to vec4_gs_visitor::emit_thread_end() to
> cause the appropriate data to be written to the vertex count. Are those
> changes elsewhere in the series?
I handled that in the gen8_vec4_generator class (introduced in patch 12):
The generate_urb_write() function reserves space:
void
gen8_vec4_generator::generate_urb_write(vec4_instruction *ir, bool vs)
{
...
int global_offset = ir->offset;
/* The GS needs to increment Global Offset by 1 to make room for the extra
* "Vertex Count" payload at the beginning.
*/
if (!vs)
++global_offset;
...
}
and generate_gs_thread_end() does a SEND with EOT that writes Vertex Count
at offset 0.
It seems to work pretty well. Sorry for the awkward split in the patch series.
--Ken
More information about the mesa-dev
mailing list