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" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Jason Ekstrand 2016-05-18 12:28:31 -07:00
parent 8892519751
commit ad3deec8ca

View file

@ -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);