[Mesa-dev] [PATCH 05/13] i965/draw: Use worst-case VBO bounds if brw->num_instances == 0
Jason Ekstrand
jason at jlekstrand.net
Thu May 19 07:21:02 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: "10.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-dev
mailing list