diff options
author | Kenneth Graunke <[email protected]> | 2013-05-29 18:51:29 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2013-05-31 21:54:49 -0700 |
commit | 4405ff4055685841c9d9545da52c7edc8708b14b (patch) | |
tree | b31402e2fa935d291ffc47a2c5c61dd007190948 /src/mesa | |
parent | 869c5d438f137b2c6b9aec1dddc00bfa64f36621 (diff) |
i965: Fix haswell_upload_cut_index when there's no index buffer.
brw->ib.type is reset to -1 at the start of each batch. If there's no
index buffer, it won't get updated to a sensible value, resulting in
_mesa_primitive_restart_index's "Invalid index buffer type" assertion
tripping.
Fixes a regression since 7c87a3b5dac118697a9b67caa7b6d5cab60f316d.
NOTE: This is a candidate for the 9.1 branch (and should be squashed).
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=65195
Signed-off-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_primitive_restart.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_primitive_restart.c b/src/mesa/drivers/dri/i965/brw_primitive_restart.c index e9265388fc9..b5cfbbc4c6f 100644 --- a/src/mesa/drivers/dri/i965/brw_primitive_restart.c +++ b/src/mesa/drivers/dri/i965/brw_primitive_restart.c @@ -194,9 +194,21 @@ haswell_upload_cut_index(struct brw_context *brw) ctx->Array._PrimitiveRestart ? HSW_CUT_INDEX_ENABLE : 0; /* BRW_NEW_INDEX_BUFFER */ + unsigned cut_index; + if (brw->ib.ib) { + cut_index = _mesa_primitive_restart_index(ctx, brw->ib.type); + } else { + /* There's no index buffer, but primitive restart may still apply + * to glDrawArrays and such. FIXED_INDEX mode only applies to drawing + * operations that use an index buffer, so we can ignore it and use + * the GL restart index directly. + */ + cut_index = ctx->Array.RestartIndex; + } + BEGIN_BATCH(2); OUT_BATCH(_3DSTATE_VF << 16 | cut_index_setting | (2 - 2)); - OUT_BATCH(_mesa_primitive_restart_index(ctx, brw->ib.type)); + OUT_BATCH(cut_index); ADVANCE_BATCH(); } |