[Mesa-stable] [PATCH v3 05/16] i965/draw: Use worst-case VBO bounds if brw->num_instances == 0

Jason Ekstrand jason at jlekstrand.net
Fri May 20 23:53:16 UTC 2016


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 at lists.freedesktop.org>
---
 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 0a7725d..725a65e 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.5.0.400.gff86faf



More information about the mesa-stable mailing list