[Mesa-dev] [PATCH] i965: Fix haswell_upload_cut_index when there's no index buffer.
Kenneth Graunke
kenneth at whitecape.org
Wed May 29 18:51:29 PDT 2013
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).
Cc: Eric Anholt <eric at anholt.net>
Cc: Ian Romanick <idr at freedesktop.org>
Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
---
src/mesa/drivers/dri/i965/brw_primitive_restart.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/mesa/drivers/dri/i965/brw_primitive_restart.c b/src/mesa/drivers/dri/i965/brw_primitive_restart.c
index e926538..b5cfbbc 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();
}
--
1.8.2.2
More information about the mesa-dev
mailing list