summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2016-04-28 17:03:50 -0500
committerNicolai Hähnle <[email protected]>2016-04-29 11:39:56 -0500
commit59af21c3e991d13ffaf79494ea608a67b7d3e7f0 (patch)
tree9661e86603f90c2b6cfabea3ed7f418ef01b7840 /src/gallium
parent4055babc7557f788e6c8f3cbb2c62d6161cf6903 (diff)
tgsi/text: fix parsing of memory instructions
Properly handle Target and Format parameters when present. Reviewed-by: Ilia Mirkin <[email protected]> Reviewed-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_text.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c b/src/gallium/auxiliary/tgsi/tgsi_text.c
index c7f1664f917..ea1ee530c55 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_text.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
@@ -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);
- 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;
- }
+
+ j = str_match_name_from_array(&cur, tgsi_memory_names,
+ ARRAY_SIZE(tgsi_memory_names));
+ if (j >= 0) {
+ inst.Memory.Qualifier |= 1U << j;
+ continue;
}
- if (j == 3) {
- report_error(ctx, "Expected memory qualifier");
- return FALSE;
+
+ j = str_match_name_from_array(&cur, tgsi_texture_names,
+ ARRAY_SIZE(tgsi_texture_names));
+ if (j >= 0) {
+ inst.Memory.Texture = j;
+ continue;
}
- cur = ctx->cur;
- eat_opt_white(&cur);
+
+ j = str_match_format(&cur);
+ if (j >= 0) {
+ inst.Memory.Format = j;
+ continue;
+ }
+
+ ctx->cur = cur;
+ report_error(ctx, "Expected memory qualifier, texture target, or format\n");
+ return FALSE;
}
cur = ctx->cur;