From: Jason Ekstrand Date: Wed, 18 May 2016 19:28:31 +0000 (-0700) Subject: i965/draw: Use worst-case VBO bounds if brw->num_instances == 0 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ad3deec8ca9813a746ac833e6a0cc2ed13286c35;p=mesa.git 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 --- 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);