summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorbin Simpson <[email protected]>2009-11-07 10:39:42 -0800
committerCorbin Simpson <[email protected]>2009-11-07 11:55:25 -0800
commitef513776b5bdd11968d2ca03862e9d1ac48e099f (patch)
treecde8ca2bdc5c0b7f20361df29fcf1c1332605a7a
parent746c01b3b2f77d8d8ba14fc517d04dbaf080d77d (diff)
r300g: Don't assert on oversized VBOs, just return FALSE.
-rw-r--r--src/gallium/drivers/r300/r300_render.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c
index 1532de367f6..89bf749b5fa 100644
--- a/src/gallium/drivers/r300/r300_render.c
+++ b/src/gallium/drivers/r300/r300_render.c
@@ -75,7 +75,6 @@ static void r300_emit_draw_arrays(struct r300_context *r300,
unsigned count)
{
CS_LOCALS(r300);
- assert(count < 65536);
BEGIN_CS(4);
OUT_CS_REG(R300_VAP_VF_MAX_VTX_INDX, count);
@@ -100,7 +99,6 @@ static void r300_emit_draw_elements(struct r300_context *r300,
/* XXX most of these are stupid */
assert(indexSize == 4 || indexSize == 2);
- assert(count < 65536);
assert((start * indexSize) % 4 == 0);
assert(offset_dwords == 0);
@@ -172,8 +170,13 @@ boolean r300_draw_range_elements(struct pipe_context* pipe,
{
struct r300_context* r300 = r300_context(pipe);
- if (!u_trim_pipe_prim(mode, &count))
+ if (!u_trim_pipe_prim(mode, &count)) {
return FALSE;
+ }
+
+ if (count > 65535) {
+ return FALSE;
+ }
r300_update_derived_state(r300);
@@ -210,8 +213,13 @@ boolean r300_draw_arrays(struct pipe_context* pipe, unsigned mode,
{
struct r300_context* r300 = r300_context(pipe);
- if (!u_trim_pipe_prim(mode, &count))
+ if (!u_trim_pipe_prim(mode, &count)) {
return FALSE;
+ }
+
+ if (count > 65535) {
+ return FALSE;
+ }
r300_update_derived_state(r300);