summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/draw/draw_pt_vcache.c
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2008-08-25 11:19:24 +0100
committerKeith Whitwell <keith@tungstengraphics.com>2008-08-26 09:36:52 +0100
commite6887a5752774c18cf527477fdd3e57e4893ff3b (patch)
treebb2b7fd03509130ca7744b0fd53d5628615e323c /src/gallium/auxiliary/draw/draw_pt_vcache.c
parent026e7731e549e0777c010348460fd48b3d75a843 (diff)
draw: attempt atomic submit of large drawelements calls
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_pt_vcache.c')
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_vcache.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pt_vcache.c b/src/gallium/auxiliary/draw/draw_pt_vcache.c
index b8b5de729d..e8467b2ae3 100644
--- a/src/gallium/auxiliary/draw/draw_pt_vcache.c
+++ b/src/gallium/auxiliary/draw/draw_pt_vcache.c
@@ -306,6 +306,7 @@ static void vcache_check_run( struct draw_pt_front_end *frontend,
unsigned fetch_count = max_index + 1 - min_index;
const ushort *transformed_elts;
ushort *storage = NULL;
+ boolean ok;
if (0) debug_printf("fetch_count %d fetch_max %d draw_count %d\n", fetch_count,
@@ -313,7 +314,6 @@ static void vcache_check_run( struct draw_pt_front_end *frontend,
draw_count);
if (max_index == 0xffffffff ||
- fetch_count >= vcache->fetch_max ||
fetch_count > draw_count) {
if (0) debug_printf("fail\n");
goto fail;
@@ -395,14 +395,19 @@ static void vcache_check_run( struct draw_pt_front_end *frontend,
transformed_elts = storage;
}
- vcache->middle->run_linear_elts( vcache->middle,
- min_index, /* start */
- fetch_count,
- transformed_elts,
- draw_count );
-
+ ok = vcache->middle->run_linear_elts( vcache->middle,
+ min_index, /* start */
+ fetch_count,
+ transformed_elts,
+ draw_count );
+
FREE(storage);
- return;
+
+ if (ok)
+ return;
+
+ debug_printf("failed to execute atomic draw elts for %d/%d, splitting up\n",
+ fetch_count, draw_count);
fail:
vcache_run( frontend, get_elt, elts, draw_count );