According to the documentation: "The Cut Index is compared to the fetched (and possibly-sign-extended) vertex index, and if these values are equal, the current primitive topology is terminated. Note that, for index buffers <32bpp, it is possible to set the Cut Index to a (large) value that will never match a sign-extended vertex index."
This suggests that we should not set the value to 0xFFFFFFFF for unsigned byte or short index buffers, but rather 0xFF or 0xFFFF. Fixes sporadic failures in the ES 3 instanced_arrays_primitive_restart conformance test when run in combination with other tests. No Piglit regressions. Cc: Ian Romanick <i...@freedesktop.org Cc: Paul Berry <stereotype...@gmail.com> Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/mesa/drivers/dri/i965/brw_primitive_restart.c | 27 ++++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_primitive_restart.c b/src/mesa/drivers/dri/i965/brw_primitive_restart.c index f824915..cf4a1ea 100644 --- a/src/mesa/drivers/dri/i965/brw_primitive_restart.c +++ b/src/mesa/drivers/dri/i965/brw_primitive_restart.c @@ -183,19 +183,30 @@ haswell_upload_cut_index(struct brw_context *brw) if (!intel->is_haswell) return; - const unsigned cut_index_setting = - ctx->Array._PrimitiveRestart ? HSW_CUT_INDEX_ENABLE : 0; - - BEGIN_BATCH(2); - OUT_BATCH(_3DSTATE_VF << 16 | cut_index_setting | (2 - 2)); - OUT_BATCH(ctx->Array._RestartIndex); - ADVANCE_BATCH(); + if (ctx->Array._PrimitiveRestart) { + int cut_index = ctx->Array._RestartIndex; + + if (brw->ib.type == GL_UNSIGNED_BYTE) + cut_index &= 0xff; + else if (brw->ib.type == GL_UNSIGNED_SHORT) + cut_index &= 0xffff; + + BEGIN_BATCH(2); + OUT_BATCH(_3DSTATE_VF << 16 | HSW_CUT_INDEX_ENABLE | (2 - 2)); + OUT_BATCH(cut_index); + ADVANCE_BATCH(); + } else { + BEGIN_BATCH(2); + OUT_BATCH(_3DSTATE_VF << 16 | (2 - 2)); + OUT_BATCH(0); + ADVANCE_BATCH(); + } } const struct brw_tracked_state haswell_cut_index = { .dirty = { .mesa = _NEW_TRANSFORM, - .brw = 0, + .brw = BRW_NEW_INDEX_BUFFER, .cache = 0, }, .emit = haswell_upload_cut_index, -- 1.8.2.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev