summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2010-01-24 14:58:45 +1000
committerDave Airlie <airlied@redhat.com>2010-01-24 15:00:06 +1000
commit232ddfec24d2e707c4e374d817c559cc6415d609 (patch)
treeb6698777a244004adb43b5bf8021ffc63073d3b7 /src
parent28c3e57c8354f988f49bac69a6866418e6009a5d (diff)
r300g: fix flushing harder.
I swear ipers runs here after this commit. After we flush we need to redo the space check
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/r300/r300_emit.c3
-rw-r--r--src/gallium/drivers/r300/r300_render.c4
2 files changed, 4 insertions, 3 deletions
diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c
index cc40abf168..e08e6c2292 100644
--- a/src/gallium/drivers/r300/r300_emit.c
+++ b/src/gallium/drivers/r300/r300_emit.c
@@ -1105,9 +1105,10 @@ void r300_emit_dirty_state(struct r300_context* r300)
/* Make sure we have at least 2*1024 spare dwords. */
/* XXX It would be nice to know the number of dwords we really need to
* XXX emit. */
+again:
if (!r300->winsys->check_cs(r300->winsys, dwords)) {
r300->context.flush(&r300->context, 0, NULL);
- r300_emit_buffer_validate(r300);
+ goto again;
}
if (r300->dirty_state & R300_NEW_QUERY) {
diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c
index cb2d8d4537..677031ef04 100644
--- a/src/gallium/drivers/r300/r300_render.c
+++ b/src/gallium/drivers/r300/r300_render.c
@@ -302,6 +302,8 @@ void r300_draw_range_elements(struct pipe_context* pipe,
r300_update_derived_state(r300);
+ r300_emit_buffer_validate(r300);
+
if (!r300_setup_vertex_buffers(r300)) {
return;
}
@@ -311,8 +313,6 @@ void r300_draw_range_elements(struct pipe_context* pipe,
indexSize = 2;
}
- r300_emit_buffer_validate(r300);
-
if (!r300->winsys->add_buffer(r300->winsys, indexBuffer,
RADEON_GEM_DOMAIN_GTT, 0)) {
goto cleanup;