summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2016-06-08 15:55:18 -0700
committerKenneth Graunke <[email protected]>2016-06-13 19:35:52 -0700
commit9f37df06dafbf54cec6749543cac1baa77d0b5e2 (patch)
treec3bc9500af0cf07449f354fd9067b42ec512cee0
parentb010fa85675b98962426fe8961466fbae2d25499 (diff)
i965: Fix issues with number of VS URB entries on Cherryview/Broxton.
Cherryview/Broxton annoyingly have a minimum number of VS URB entries of 34, which is not a multiple of 8. When the VS size is less than 9, the number of VS entries has to be a multiple of 8. Notably, BLORP programmed the minimum number of VS URB entries (34), with a size of 1 (less than 9), which is invalid. It seemed like this could be a problem in the regular URB code as well, so I went ahead and updated that to be safe. Cc: "12.0" <[email protected]> Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Jordan Justen <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/gen7_blorp.c5
-rw-r--r--src/mesa/drivers/dri/i965/gen7_urb.c2
2 files changed, 5 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/i965/gen7_blorp.c b/src/mesa/drivers/dri/i965/gen7_blorp.c
index 270fe57ccaf..235f0b504e1 100644
--- a/src/mesa/drivers/dri/i965/gen7_blorp.c
+++ b/src/mesa/drivers/dri/i965/gen7_blorp.c
@@ -67,8 +67,9 @@ gen7_blorp_emit_urb_config(struct brw_context *brw)
push_constant_bytes / chunk_size_bytes;
const unsigned vs_size = 1;
const unsigned vs_start = push_constant_chunks;
+ const unsigned min_vs_entries = ALIGN(brw->urb.min_vs_entries, 8);
const unsigned vs_chunks =
- DIV_ROUND_UP(brw->urb.min_vs_entries * vs_size * 64, chunk_size_bytes);
+ DIV_ROUND_UP(min_vs_entries * vs_size * 64, chunk_size_bytes);
if (gen7_blorp_skip_urb_config(brw))
return;
@@ -83,7 +84,7 @@ gen7_blorp_emit_urb_config(struct brw_context *brw)
urb_size / 2 /* fs_size */);
gen7_emit_urb_state(brw,
- brw->urb.min_vs_entries /* num_vs_entries */,
+ min_vs_entries /* num_vs_entries */,
vs_size,
vs_start,
0 /* num_hs_entries */,
diff --git a/src/mesa/drivers/dri/i965/gen7_urb.c b/src/mesa/drivers/dri/i965/gen7_urb.c
index a412a4263b3..387ed2e8923 100644
--- a/src/mesa/drivers/dri/i965/gen7_urb.c
+++ b/src/mesa/drivers/dri/i965/gen7_urb.c
@@ -234,6 +234,8 @@ gen7_upload_urb(struct brw_context *brw)
*/
unsigned vs_min_entries =
tess_present && brw->gen == 8 ? 192 : brw->urb.min_vs_entries;
+ /* Min VS Entries isn't a multiple of 8 on Cherryview/Broxton; round up */
+ vs_min_entries = ALIGN(vs_min_entries, vs_granularity);
unsigned vs_chunks =
DIV_ROUND_UP(vs_min_entries * vs_entry_size_bytes, chunk_size_bytes);