mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 22:10:10 +01:00
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 <timur.kristof@gmail.com> Tested-by: Andre Heider <a.heider@gmail.com> Tested-by: Rob Clark <robdclark@gmail.com> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Acked-By: Tested-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
950aebbc53
commit
4dba72c4b3
1 changed files with 58 additions and 28 deletions
|
|
@ -1779,15 +1779,50 @@ ttn_add_output_stores(struct ttn_compile *c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct nir_shader *
|
/**
|
||||||
tgsi_to_nir(const void *tgsi_tokens,
|
* Parses the given TGSI tokens.
|
||||||
const nir_shader_compiler_options *options)
|
*/
|
||||||
|
static void
|
||||||
|
ttn_parse_tgsi(struct ttn_compile *c, const void *tgsi_tokens)
|
||||||
{
|
{
|
||||||
struct tgsi_parse_context parser;
|
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 ttn_compile *c;
|
||||||
struct nir_shader *s;
|
struct nir_shader *s;
|
||||||
int ret;
|
struct tgsi_shader_info scan;
|
||||||
|
|
||||||
c = rzalloc(NULL, struct ttn_compile);
|
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,
|
nir_builder_init_simple_shader(&c->build, NULL,
|
||||||
tgsi_processor_to_shader_stage(scan.processor),
|
tgsi_processor_to_shader_stage(scan.processor),
|
||||||
options);
|
options);
|
||||||
|
|
||||||
s = c->build.shader;
|
s = c->build.shader;
|
||||||
|
|
||||||
if (s->info.stage == MESA_SHADER_FRAGMENT)
|
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,
|
c->loop_stack = rzalloc_array(c, nir_cursor,
|
||||||
scan.opcode_count[TGSI_OPCODE_BGNLOOP]);
|
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;
|
|
||||||
|
|
||||||
case TGSI_TOKEN_TYPE_IMMEDIATE:
|
|
||||||
ttn_emit_immediate(c);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tgsi_parse_free(&parser);
|
|
||||||
|
|
||||||
|
ttn_parse_tgsi(c, tgsi_tokens);
|
||||||
ttn_add_output_stores(c);
|
ttn_add_output_stores(c);
|
||||||
|
|
||||||
|
nir_validate_shader(c->build.shader, "TTN: after parsing TGSI and creating the NIR shader");
|
||||||
|
|
||||||
|
return 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);
|
ralloc_free(c);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue