diff options
author | Kenneth Graunke <[email protected]> | 2013-11-05 16:55:06 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2014-01-21 00:20:14 -0800 |
commit | ad04e396faaddce926ee1146f0da12b30aee7b87 (patch) | |
tree | 643e84c8bb3f6f86e1a36e4566fdc73d8e52f889 /src/mesa/drivers/dri | |
parent | 94c0a11b199fb299ee1b2ea38154df5d5e621a64 (diff) |
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 <[email protected]>
Reviewed-by: Paul Berry <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_gs.c | 6 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp | 7 |
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 018b0b67461..c40112b0f1f 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 f33c80dae3d..f0351eaa32a 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; } |