diff options
author | Timur Kristóf <[email protected]> | 2019-02-08 09:59:58 +0100 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2019-03-05 19:13:27 +0000 |
commit | 4dba72c4b35eeb312da232b2f30f067885bc9f07 (patch) | |
tree | 2e558d6a067738b3684b9d00c10fb049cd20361e | |
parent | 950aebbc5317c5a692b522959ad66ea197344121 (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]>
-rw-r--r-- | src/gallium/auxiliary/nir/tgsi_to_nir.c | 82 |
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; } + |