From ad3deec8ca9813a746ac833e6a0cc2ed13286c35 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 18 May 2016 12:28:31 -0700 Subject: [PATCH] i965/draw: Use worst-case VBO bounds if brw->num_instances == 0 Previously, we only handled the "I don't know what's going on" case for things with InstanceDivisor == 0. However, in the DrawIndirect case we can get num_instances == 0 and we don't know what's going on with the instanced ones either. This commit makes the worst-case bound the default and then conservatively tightens the bound. Cc: "11.1 11.2" Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_draw_upload.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c index 0a7725dcb96..725a65e10ab 100644 --- a/src/mesa/drivers/dri/i965/brw_draw_upload.c +++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c @@ -468,17 +468,18 @@ brw_prepare_vertices(struct brw_context *brw) const uint32_t offset = (uintptr_t)glarray->Ptr; - uint32_t start, range; + /* Start with the worst case */ + uint32_t start = 0; + uint32_t range = intel_buffer->Base.Size; if (glarray->InstanceDivisor) { - start = offset; - range = (glarray->StrideB * ((brw->num_instances / - glarray->InstanceDivisor) - 1) + - glarray->_ElementSize); + if (brw->num_instances) { + start = offset; + range = (glarray->StrideB * ((brw->num_instances / + glarray->InstanceDivisor) - 1) + + glarray->_ElementSize); + } } else { - if (!brw->vb.index_bounds_valid) { - start = 0; - range = intel_buffer->Base.Size; - } else { + if (brw->vb.index_bounds_valid) { start = offset + min_index * glarray->StrideB; range = (glarray->StrideB * (max_index - min_index) + glarray->_ElementSize); -- 2.30.2