summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/translate/translate_sse.c
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2014-03-03 23:09:58 -0500
committerZack Rusin <[email protected]>2014-03-04 15:56:04 -0500
commit1dd84357ec8d6894ec6bbd7040a8e8328015cd16 (patch)
treec60fe0c84816a98afa14c095267fac3b79bcc39c /src/gallium/auxiliary/translate/translate_sse.c
parent08f174daa41b89c41a87c350f407307e2ba258eb (diff)
translate: fix buffer overflows
Because in draw we always inject position at slot 0 whenever fragment shader would take the maximum number of inputs (32) it meant that we had PIPE_MAX_ATTRIBS + 1 slots to translate, which meant that we were crashing with fragment shaders that took the maximum number of attributes as inputs. The actual max number of attributes we need to translate thus is PIPE_MAX_ATTRIBS + 1. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: José Fonseca <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]> Reviewed-by: Matthew McClure <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/translate/translate_sse.c')
-rw-r--r--src/gallium/auxiliary/translate/translate_sse.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/gallium/auxiliary/translate/translate_sse.c b/src/gallium/auxiliary/translate/translate_sse.c
index b6bc22227d6..1b698cd7c7c 100644
--- a/src/gallium/auxiliary/translate/translate_sse.c
+++ b/src/gallium/auxiliary/translate/translate_sse.c
@@ -104,15 +104,15 @@ struct translate_sse
int8_t reg_to_const[16];
int8_t const_to_reg[NUM_CONSTS];
- struct translate_buffer buffer[PIPE_MAX_ATTRIBS];
+ struct translate_buffer buffer[TRANSLATE_MAX_ATTRIBS];
unsigned nr_buffers;
/* Multiple buffer variants can map to a single buffer. */
- struct translate_buffer_variant buffer_variant[PIPE_MAX_ATTRIBS];
+ struct translate_buffer_variant buffer_variant[TRANSLATE_MAX_ATTRIBS];
unsigned nr_buffer_variants;
/* Multiple elements can map to a single buffer variant. */
- unsigned element_to_buffer_variant[PIPE_MAX_ATTRIBS];
+ unsigned element_to_buffer_variant[TRANSLATE_MAX_ATTRIBS];
boolean use_instancing;
unsigned instance_id;
@@ -1494,6 +1494,8 @@ translate_sse2_create(const struct translate_key *key)
p->translate.release = translate_sse_release;
p->translate.set_buffer = translate_sse_set_buffer;
+ assert(key->nr_elements <= TRANSLATE_MAX_ATTRIBS);
+
for (i = 0; i < key->nr_elements; i++) {
if (key->element[i].type == TRANSLATE_ELEMENT_NORMAL) {
unsigned j;