mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2024-11-27 09:31:03 +00: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
@ -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;
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user