diff options
author | Marek Olšák <maraeo@gmail.com> | 2010-04-11 08:28:39 +0200 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2010-04-11 10:15:50 +0200 |
commit | 146879284c6b844f35afe3a3ef3330726afbe8ac (patch) | |
tree | 92c54f39089b1dcc54d7b5916778c07e60c08472 /src/gallium/drivers/r300/r300_render.c | |
parent | 08afcaa56e187cdd137a5c6581c265c1a0fc8d18 (diff) |
r300g: revisit some assertions and fix potential failures
* Turn some assertions to error messages.
* At most 16 vertex elements can be set, others are ignored.
* Rasterize at most 8 vertex-shader generic outputs, others are ignored.
This includes fog and WPOS.
* Unknown shader semantic names are ignored.
Diffstat (limited to 'src/gallium/drivers/r300/r300_render.c')
-rw-r--r-- | src/gallium/drivers/r300/r300_render.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c index 44da7aa377..751a7e6d5b 100644 --- a/src/gallium/drivers/r300/r300_render.c +++ b/src/gallium/drivers/r300/r300_render.c @@ -273,7 +273,11 @@ void r500_emit_draw_arrays(struct r300_context *r300, CS_LOCALS(r300); if (alt_num_verts) { - assert(count < (1 << 24)); + if (count >= (1 << 24)) { + fprintf(stderr, "r300: Got a huge number of vertices: %i, " + "refusing to render.\n", count); + return; + } BEGIN_CS(9); OUT_CS_REG(R500_VAP_ALT_NUM_VERTICES, count); } else { @@ -309,7 +313,11 @@ void r500_emit_draw_elements(struct r300_context *r300, #endif CS_LOCALS(r300); - assert(count < (1 << 24)); + if (count >= (1 << 24)) { + fprintf(stderr, "r300: Got a huge number of vertices: %i, " + "refusing to render.\n", count); + return; + } maxIndex = MIN2(maxIndex, r300->vertex_buffer_max_index); |