<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 20 January 2014 22:56, Kenneth Graunke <span dir="ltr"><<a href="mailto:kenneth@whitecape.org" target="_blank">kenneth@whitecape.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">v2: Also increment ir->offset in the GS visitor, rather than at the<br>
    final assembly generation stage (requested by Paul).<br>
<br>
Signed-off-by: Kenneth Graunke <<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>><br>
---<br>
 src/mesa/drivers/dri/i965/brw_vec4_gs.c           | 6 ++++++<br>
 src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp | 7 +++++++<br>
 2 files changed, 13 insertions(+)<br>
<br>
Hey Paul,<br>
<br>
I think I implemented all of your feedback from last time.  (Previously,<br>
I'd done this in gen8_vec4_generator, and you asked me to move it to the<br>
visitor.  This patch does that - and it is indeed much nicer.)<br>
<br>
 --Ken<br></blockquote><div><br></div><div>Looks good, thanks!</div><div><br></div><div>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs.c b/src/mesa/drivers/dri/i965/brw_vec4_gs.c<br>
index 018b0b6..c40112b 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_vec4_gs.c<br>
+++ b/src/mesa/drivers/dri/i965/brw_vec4_gs.c<br>
@@ -194,6 +194,12 @@ do_gs_prog(struct brw_context *brw,<br>
       c.prog_data.output_vertex_size_hwords * 32 * gp->program.VerticesOut;<br>
    output_size_bytes += 32 * c.prog_data.control_data_header_size_hwords;<br>
<br>
+   /* Broadwell stores "Vertex Count" as a full 8 DWord (32 byte) URB output,<br>
+    * which comes before the control header.<br>
+    */<br>
+   if (brw->gen >= 8)<br>
+      output_size_bytes += 32;<br>
+<br>
    assert(output_size_bytes >= 1);<br>
    if (output_size_bytes > GEN7_MAX_GS_URB_ENTRY_SIZE_BYTES)<br>
       return false;<br>
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp<br>
index f33c80d..f0351ea 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp<br>
@@ -267,6 +267,13 @@ vec4_gs_visitor::emit_urb_write_opcode(bool complete)<br>
<br>
    vec4_instruction *inst = emit(GS_OPCODE_URB_WRITE);<br>
    inst->offset = c->prog_data.control_data_header_size_hwords;<br>
+<br>
+   /* We need to increment Global Offset by 1 to make room for Broadwell's<br>
+    * extra "Vertex Count" payload at the beginning of the URB entry.<br>
+    */<br>
+   if (brw->gen >= 8)<br>
+      inst->offset++;<br>
+<br>
    inst->urb_write_flags = BRW_URB_WRITE_PER_SLOT_OFFSET;<br>
    return inst;<br>
 }<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.5.2<br>
<br>
</font></span></blockquote></div><br></div></div>