diff options
author | Marek Olšák <[email protected]> | 2010-04-27 11:42:08 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2010-04-27 12:25:22 +0200 |
commit | 847a24c011fda1fa21995a3e54848f15e75dccc9 (patch) | |
tree | d3429f52a7a272c2db3271bdf3eb1648acc468eb | |
parent | 35d52a062621d1a81b39f465004526e2f597825b (diff) |
r300g: compensate for non-atomized emit_query_end in the CS
And reserve a little more space just in case.
-rw-r--r-- | src/gallium/drivers/r300/r300_emit.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_render.c | 10 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c index 663a7715d95..0353b90c797 100644 --- a/src/gallium/drivers/r300/r300_emit.c +++ b/src/gallium/drivers/r300/r300_emit.c @@ -1165,6 +1165,11 @@ unsigned r300_get_num_dirty_dwords(struct r300_context *r300) } } + /* emit_query_end is not atomized. */ + dwords += 26; + /* let's reserve some more, just in case */ + dwords += 32; + return dwords; } diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c index 86be3bd448c..7c3a7902a49 100644 --- a/src/gallium/drivers/r300/r300_render.c +++ b/src/gallium/drivers/r300/r300_render.c @@ -600,8 +600,9 @@ void r300_draw_range_elements(struct pipe_context* pipe, start += short_count; count -= short_count; - /* 16 spare dwords are enough for emit_draw_elements. */ - if (count && r300_reserve_cs_space(r300, 16)) { + /* 16 spare dwords are enough for emit_draw_elements. + * Also reserve some space for emit_query_end. */ + if (count && r300_reserve_cs_space(r300, 74)) { r300_emit_buffer_validate(r300, TRUE, indexBuffer); r300_emit_dirty_state(r300); r300_emit_aos(r300, 0, TRUE); @@ -668,8 +669,9 @@ void r300_draw_arrays(struct pipe_context* pipe, unsigned mode, count -= short_count; /* Again, we emit both AOS and draw_arrays so there should be - * at least 128 spare dwords. */ - if (count && r300_reserve_cs_space(r300, 128)) { + * at least 128 spare dwords. + * Also reserve some space for emit_query_end. */ + if (count && r300_reserve_cs_space(r300, 186)) { r300_emit_buffer_validate(r300, TRUE, NULL); r300_emit_dirty_state(r300); } |