summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/nir
diff options
context:
space:
mode:
authorTimur Kristóf <[email protected]>2019-02-08 09:59:58 +0100
committerEric Anholt <[email protected]>2019-03-05 19:13:27 +0000
commit4dba72c4b35eeb312da232b2f30f067885bc9f07 (patch)
tree2e558d6a067738b3684b9d00c10fb049cd20361e /src/gallium/auxiliary/nir
parent950aebbc5317c5a692b522959ad66ea197344121 (diff)
tgsi_to_nir: Split to smaller functions.
Previously, tgsi_to_nir was a single big function, and this patch intends to make the code easier to understand by splitting it up to multiple smaller pieces. Signed-Off-By: Timur Kristóf <[email protected]> Tested-by: Andre Heider <[email protected]> Tested-by: Rob Clark <[email protected]> Reviewed-by: Timothy Arceri <[email protected]> Acked-By: Tested-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/nir')
-rw-r--r--src/gallium/auxiliary/nir/tgsi_to_nir.c82
1 files changed, 56 insertions, 26 deletions
diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c
index bd2aaaed0dc..1260752f0f6 100644
--- a/src/gallium/auxiliary/nir/tgsi_to_nir.c
+++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c
@@ -1779,15 +1779,50 @@ ttn_add_output_stores(struct ttn_compile *c)
}
}
-struct nir_shader *
-tgsi_to_nir(const void *tgsi_tokens,
- const nir_shader_compiler_options *options)
+/**
+ * Parses the given TGSI tokens.
+ */
+static void
+ttn_parse_tgsi(struct ttn_compile *c, const void *tgsi_tokens)
{
struct tgsi_parse_context parser;
- struct tgsi_shader_info scan;
+ int ret;
+
+ ret = tgsi_parse_init(&parser, tgsi_tokens);
+ assert(ret == TGSI_PARSE_OK);
+
+ while (!tgsi_parse_end_of_tokens(&parser)) {
+ tgsi_parse_token(&parser);
+ c->token = &parser.FullToken;
+
+ switch (parser.FullToken.Token.Type) {
+ case TGSI_TOKEN_TYPE_DECLARATION:
+ ttn_emit_declaration(c);
+ break;
+
+ case TGSI_TOKEN_TYPE_INSTRUCTION:
+ ttn_emit_instruction(c);
+ break;
+
+ case TGSI_TOKEN_TYPE_IMMEDIATE:
+ ttn_emit_immediate(c);
+ break;
+ }
+ }
+
+ tgsi_parse_free(&parser);
+}
+
+/**
+ * Initializes a TGSI-to-NIR compiler.
+ */
+static struct ttn_compile *
+ttn_compile_init(const void *tgsi_tokens,
+ const nir_shader_compiler_options *options)
+{
struct ttn_compile *c;
struct nir_shader *s;
- int ret;
+ struct tgsi_shader_info scan;
c = rzalloc(NULL, struct ttn_compile);
@@ -1797,6 +1832,7 @@ tgsi_to_nir(const void *tgsi_tokens,
nir_builder_init_simple_shader(&c->build, NULL,
tgsi_processor_to_shader_stage(scan.processor),
options);
+
s = c->build.shader;
if (s->info.stage == MESA_SHADER_FRAGMENT)
@@ -1827,32 +1863,26 @@ tgsi_to_nir(const void *tgsi_tokens,
c->loop_stack = rzalloc_array(c, nir_cursor,
scan.opcode_count[TGSI_OPCODE_BGNLOOP]);
- ret = tgsi_parse_init(&parser, tgsi_tokens);
- assert(ret == TGSI_PARSE_OK);
-
- while (!tgsi_parse_end_of_tokens(&parser)) {
- tgsi_parse_token(&parser);
- c->token = &parser.FullToken;
-
- switch (parser.FullToken.Token.Type) {
- case TGSI_TOKEN_TYPE_DECLARATION:
- ttn_emit_declaration(c);
- break;
- case TGSI_TOKEN_TYPE_INSTRUCTION:
- ttn_emit_instruction(c);
- break;
+ ttn_parse_tgsi(c, tgsi_tokens);
+ ttn_add_output_stores(c);
- case TGSI_TOKEN_TYPE_IMMEDIATE:
- ttn_emit_immediate(c);
- break;
- }
- }
+ nir_validate_shader(c->build.shader, "TTN: after parsing TGSI and creating the NIR shader");
- tgsi_parse_free(&parser);
+ return c;
+}
- ttn_add_output_stores(c);
+struct nir_shader *
+tgsi_to_nir(const void *tgsi_tokens,
+ const nir_shader_compiler_options *options)
+{
+ struct ttn_compile *c;
+ struct nir_shader *s;
+ c = ttn_compile_init(tgsi_tokens, options);
+ s = c->build.shader;
ralloc_free(c);
+
return s;
}
+