summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/r300/r300_tgsi_to_rc.c
diff options
context:
space:
mode:
authorCorbin Simpson <MostAwesomeDude@gmail.com>2010-02-01 19:47:46 -0800
committerCorbin Simpson <MostAwesomeDude@gmail.com>2010-02-01 19:48:24 -0800
commit565f0cef26d6da49ae58462d0c1f9b832ee71174 (patch)
tree8f7540c39d1bc677c63586a65d2f3b2c94df1c29 /src/gallium/drivers/r300/r300_tgsi_to_rc.c
parent01dcadab8b98f0ffa5bf0a859ca94ff78a8cb90a (diff)
r300g: Fix funky segfault.
Diffstat (limited to 'src/gallium/drivers/r300/r300_tgsi_to_rc.c')
-rw-r--r--src/gallium/drivers/r300/r300_tgsi_to_rc.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/gallium/drivers/r300/r300_tgsi_to_rc.c b/src/gallium/drivers/r300/r300_tgsi_to_rc.c
index 6b2bc78799..941ec17016 100644
--- a/src/gallium/drivers/r300/r300_tgsi_to_rc.c
+++ b/src/gallium/drivers/r300/r300_tgsi_to_rc.c
@@ -317,11 +317,8 @@ static void handle_immediate(struct tgsi_to_rc * ttr,
}
if (can_swizzle) {
- struct swizzled_imms* si =
- &ttr->imms_to_swizzle[ttr->imms_to_swizzle_count];
-
- si->index = index;
- si->swizzle = swizzle;
+ ttr->imms_to_swizzle[ttr->imms_to_swizzle_count].index = index;
+ ttr->imms_to_swizzle[ttr->imms_to_swizzle_count].swizzle = swizzle;
ttr->imms_to_swizzle_count++;
} else {
constant.Type = RC_CONSTANT_IMMEDIATE;
@@ -352,6 +349,9 @@ void r300_tgsi_to_rc(struct tgsi_to_rc * ttr, const struct tgsi_token * tokens)
ttr->immediate_offset = ttr->compiler->Program.Constants.Count;
+ ttr->imms_to_swizzle = malloc(ttr->info->immediate_count * sizeof(struct swizzled_imms));
+ ttr->imms_to_swizzle_count = 0;
+
tgsi_parse_init(&parser, tokens);
while (!tgsi_parse_end_of_tokens(&parser)) {
@@ -372,6 +372,8 @@ void r300_tgsi_to_rc(struct tgsi_to_rc * ttr, const struct tgsi_token * tokens)
tgsi_parse_free(&parser);
+ free(ttr->imms_to_swizzle);
+
rc_calculate_inputs_outputs(ttr->compiler);
}