Lines Matching refs:ctx
1013 agx_context *ctx = b->shader;
1021 agx_block_add_successor(ctx->current_block, ctx->continue_block);
1024 agx_block_add_successor(ctx->current_block, ctx->break_block);
1035 ctx->current_block->unconditional_jumps = true;
1051 agx_from_nir_block(agx_context *ctx, nir_block *block)
1053 return ctx->indexed_nir_blocks[block->index];
1057 agx_emit_phi_deferred(agx_context *ctx, agx_block *block, agx_instr *I)
1068 agx_block *pred = agx_from_nir_block(ctx, src->pred);
1077 agx_emit_phis_deferred(agx_context *ctx)
1079 agx_foreach_block(ctx, block) {
1082 agx_emit_phi_deferred(ctx, block, I);
1121 agx_create_block(agx_context *ctx)
1123 agx_block *blk = rzalloc(ctx, agx_block);
1131 emit_block(agx_context *ctx, nir_block *block)
1133 if (ctx->after_block) {
1134 ctx->current_block = ctx->after_block;
1135 ctx->after_block = NULL;
1137 ctx->current_block = agx_create_block(ctx);
1140 agx_block *blk = ctx->current_block;
1141 list_addtail(&blk->link, &ctx->blocks);
1144 ctx->indexed_nir_blocks[block->index] = blk;
1146 agx_builder _b = agx_init_builder(ctx, agx_after_block(blk));
1156 emit_cf_list(agx_context *ctx, struct exec_list *list);
1172 emit_if(agx_context *ctx, nir_if *nif)
1174 agx_block *first_block = ctx->current_block;
1175 agx_builder _b = agx_init_builder(ctx, agx_after_block(first_block));
1180 ctx->loop_nesting++;
1183 agx_block *if_block = emit_cf_list(ctx, &nif->then_list);
1184 agx_block *end_then = ctx->current_block;
1186 _b.cursor = agx_after_block(ctx->current_block);
1190 agx_block *else_block = emit_cf_list(ctx, &nif->else_list);
1191 agx_block *end_else = ctx->current_block;
1193 ctx->after_block = agx_create_block(ctx);
1197 agx_block_add_successor(end_then, ctx->after_block);
1198 agx_block_add_successor(end_else, ctx->after_block);
1200 _b.cursor = agx_after_block(ctx->current_block);
1203 ctx->loop_nesting--;
1207 emit_loop(agx_context *ctx, nir_loop *nloop)
1210 unsigned pushed_nesting = ctx->loop_nesting;
1211 ctx->loop_nesting = 0;
1213 agx_block *popped_break = ctx->break_block;
1214 agx_block *popped_continue = ctx->continue_block;
1216 ctx->break_block = agx_create_block(ctx);
1217 ctx->continue_block = agx_create_block(ctx);
1220 agx_builder _b = agx_init_builder(ctx, agx_after_block(ctx->current_block));
1225 agx_block_add_successor(ctx->current_block, ctx->continue_block);
1228 ctx->after_block = ctx->continue_block;
1229 agx_block *start_block = emit_cf_list(ctx, &nloop->body);
1233 _b.cursor = agx_after_block(ctx->current_block);
1238 agx_block_add_successor(ctx->current_block, ctx->continue_block);
1241 ctx->after_block = ctx->break_block;
1242 ctx->break_block = popped_break;
1243 ctx->continue_block = popped_continue;
1246 ++ctx->loop_count;
1249 assert(ctx->loop_nesting == 0);
1252 ctx->loop_nesting = pushed_nesting;
1261 emit_first_cf(agx_context *ctx)
1263 if (ctx->any_cf)
1266 agx_builder _b = agx_init_builder(ctx, agx_after_block(ctx->current_block));
1270 ctx->any_cf = true;
1274 emit_cf_list(agx_context *ctx, struct exec_list *list)
1281 agx_block *block = emit_block(ctx, nir_cf_node_as_block(node));
1290 emit_first_cf(ctx);
1291 emit_if(ctx, nir_cf_node_as_if(node));
1295 emit_first_cf(ctx);
1296 emit_loop(ctx, nir_cf_node_as_loop(node));
1308 agx_set_st_vary_final(agx_context *ctx)
1310 agx_foreach_instr_global_rev(ctx, I) {
1319 agx_print_stats(agx_context *ctx, unsigned size, FILE *fp)
1323 agx_foreach_instr_global(ctx, I) {
1341 ctx->nir->info.label ?: "",
1342 gl_shader_stage_name(ctx->stage),
1343 nr_ins, size, max_reg, nr_threads, ctx->loop_count,
1344 ctx->spills, ctx->fills);
1635 agx_context *ctx = rzalloc(NULL, agx_context);
1636 ctx->nir = nir;
1637 ctx->out = out;
1638 ctx->key = key;
1639 ctx->stage = nir->info.stage;
1640 list_inithead(&ctx->blocks);
1642 if (ctx->stage == MESA_SHADER_VERTEX) {
1654 if (ctx->stage == MESA_SHADER_VERTEX) {
1666 if (ctx->stage == MESA_SHADER_FRAGMENT) {
1683 if (ctx->stage == MESA_SHADER_VERTEX) {
1707 if (ctx->stage == MESA_SHADER_VERTEX) {
1708 agx_remap_varyings_vs(nir, &out->varyings, ctx->varyings);
1709 } else if (ctx->stage == MESA_SHADER_FRAGMENT) {
1710 agx_remap_varyings_fs(nir, &out->varyings, ctx->varyings);
1720 ctx->allocated_vec = _mesa_hash_table_u64_create(ctx);
1728 ctx->indexed_nir_blocks =
1729 rzalloc_array(ctx, agx_block *, func->impl->num_blocks);
1731 ctx->alloc += func->impl->ssa_alloc;
1732 emit_cf_list(ctx, &func->impl->body);
1733 agx_emit_phis_deferred(ctx);
1738 agx_block *last_block = list_last_entry(&ctx->blocks, agx_block, link);
1739 agx_builder _b = agx_init_builder(ctx, agx_after_block(last_block));
1747 agx_foreach_block(ctx, block)
1748 block->index = ctx->num_blocks++;
1750 agx_validate(ctx, "IR translation");
1753 agx_print_shader(ctx, stdout);
1755 agx_optimizer(ctx);
1756 agx_dce(ctx);
1757 agx_validate(ctx, "Optimization");
1760 agx_print_shader(ctx, stdout);
1762 agx_ra(ctx);
1764 if (ctx->stage == MESA_SHADER_VERTEX)
1765 agx_set_st_vary_final(ctx);
1768 agx_print_shader(ctx, stdout);
1770 agx_lower_pseudo(ctx);
1772 agx_pack_binary(ctx, binary);
1775 agx_print_stats(ctx, binary->size, stderr);
1777 ralloc_free(ctx);