summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2013-11-05 16:55:06 -0800
committerKenneth Graunke <kenneth@whitecape.org>2014-01-21 00:20:14 -0800
commitad04e396faaddce926ee1146f0da12b30aee7b87 (patch)
tree643e84c8bb3f6f86e1a36e4566fdc73d8e52f889 /src/mesa/drivers
parent94c0a11b199fb299ee1b2ea38154df5d5e621a64 (diff)
downloadexternal_mesa3d-ad04e396faaddce926ee1146f0da12b30aee7b87.zip
external_mesa3d-ad04e396faaddce926ee1146f0da12b30aee7b87.tar.gz
external_mesa3d-ad04e396faaddce926ee1146f0da12b30aee7b87.tar.bz2
i965: Reserve space for "Vertex Count" in GS outputs.
v2: Also increment ir->offset in the GS visitor, rather than at the final assembly generation stage (requested by Paul). Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Paul Berry <stereotype441@gmail.com>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_gs.c6
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp7
2 files changed, 13 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs.c b/src/mesa/drivers/dri/i965/brw_vec4_gs.c
index 018b0b6..c40112b 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 control 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;
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
index f33c80d..f0351ea 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
@@ -267,6 +267,13 @@ vec4_gs_visitor::emit_urb_write_opcode(bool complete)
vec4_instruction *inst = emit(GS_OPCODE_URB_WRITE);
inst->offset = c->prog_data.control_data_header_size_hwords;
+
+ /* We need to increment Global Offset by 1 to make room for Broadwell's
+ * extra "Vertex Count" payload at the beginning of the URB entry.
+ */
+ if (brw->gen >= 8)
+ inst->offset++;
+
inst->urb_write_flags = BRW_URB_WRITE_PER_SLOT_OFFSET;
return inst;
}