tgsi/text: fix parsing of memory instructions

Properly handle Target and Format parameters when present.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Nicolai Hähnle
2016-04-28 17:03:50 -05:00
parent 4055babc75
commit 59af21c3e9
+28 -14
View File
@@ -1134,23 +1134,37 @@ parse_instruction(
cur = ctx->cur;
eat_opt_white(&cur);
for (i = 0; inst.Instruction.Memory && *cur == ','; i++) {
uint j;
for (; inst.Instruction.Memory && *cur == ',';
ctx->cur = cur, eat_opt_white(&cur)) {
int j;
cur++;
eat_opt_white(&cur);
j = str_match_name_from_array(&cur, tgsi_memory_names,
ARRAY_SIZE(tgsi_memory_names));
if (j >= 0) {
inst.Memory.Qualifier |= 1U << j;
continue;
}
j = str_match_name_from_array(&cur, tgsi_texture_names,
ARRAY_SIZE(tgsi_texture_names));
if (j >= 0) {
inst.Memory.Texture = j;
continue;
}
j = str_match_format(&cur);
if (j >= 0) {
inst.Memory.Format = j;
continue;
}
ctx->cur = cur;
for (j = 0; j < 3; j++) {
if (str_match_nocase_whole(&ctx->cur, tgsi_memory_names[j])) {
inst.Memory.Qualifier |= 1U << j;
break;
}
}
if (j == 3) {
report_error(ctx, "Expected memory qualifier");
return FALSE;
}
cur = ctx->cur;
eat_opt_white(&cur);
report_error(ctx, "Expected memory qualifier, texture target, or format\n");
return FALSE;
}
cur = ctx->cur;