i965/draw: Use worst-case VBO bounds if brw->num_instances == 0
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 18 May 2016 19:28:31 +0000 (12:28 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 24 May 2016 02:12:34 +0000 (19:12 -0700)
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>
src/mesa/drivers/dri/i965/brw_draw_upload.c

index 0a7725dcb960f41ceae167661f1d7c8fbff34f12..725a65e10abd7814b2163e28d731eb30107e9558 100644 (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);