Lines Matching full:nir
45 #include "compiler/nir/nir.h"
46 #include "compiler/nir/nir_serialize.h"
56 #include "nir/nir_to_tgsi.h"
330 /* Note: Any setup of ->ir.nir that has had pipe->create_*_state called on in st_release_variants()
331 * it has resulted in the driver taking ownership of the NIR. Those in st_release_variants()
332 * callers should be NULLing out the nir field in any pipe_shader_state in st_release_variants()
335 * GLSL IR and ARB programs will have set gl_program->nir to the same in st_release_variants()
336 * shader as ir->ir.nir, so it will be freed by _mesa_delete_program(). in st_release_variants()
354 st_finalize_nir_before_variants(struct nir_shader *nir) in st_finalize_nir_before_variants() argument
356 NIR_PASS_V(nir, nir_split_var_copies); in st_finalize_nir_before_variants()
357 NIR_PASS_V(nir, nir_lower_var_copies); in st_finalize_nir_before_variants()
358 if (nir->options->lower_all_io_to_temps || in st_finalize_nir_before_variants()
359 nir->options->lower_all_io_to_elements || in st_finalize_nir_before_variants()
360 nir->info.stage == MESA_SHADER_VERTEX || in st_finalize_nir_before_variants()
361 nir->info.stage == MESA_SHADER_GEOMETRY) { in st_finalize_nir_before_variants()
362 NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects, false); in st_finalize_nir_before_variants()
363 } else if (nir->info.stage == MESA_SHADER_FRAGMENT) { in st_finalize_nir_before_variants()
364 NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects, true); in st_finalize_nir_before_variants()
368 nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir)); in st_finalize_nir_before_variants()
370 st_nir_assign_vs_in_locations(nir); in st_finalize_nir_before_variants()
374 st_prog_to_nir_postprocess(struct st_context *st, nir_shader *nir, in st_prog_to_nir_postprocess() argument
379 NIR_PASS_V(nir, nir_lower_regs_to_ssa); in st_prog_to_nir_postprocess()
380 nir_validate_shader(nir, "after st/ptn lower_regs_to_ssa"); in st_prog_to_nir_postprocess()
385 NIR_PASS_V(nir, nir_lower_io_to_temporaries, in st_prog_to_nir_postprocess()
386 nir_shader_get_entrypoint(nir), in st_prog_to_nir_postprocess()
388 NIR_PASS_V(nir, nir_lower_global_vars_to_local); in st_prog_to_nir_postprocess()
390 NIR_PASS_V(nir, st_nir_lower_wpos_ytransform, prog, screen); in st_prog_to_nir_postprocess()
391 NIR_PASS_V(nir, nir_lower_system_values); in st_prog_to_nir_postprocess()
392 NIR_PASS_V(nir, nir_lower_compute_system_values, NULL); in st_prog_to_nir_postprocess()
394 /* Optimise NIR */ in st_prog_to_nir_postprocess()
395 NIR_PASS_V(nir, nir_opt_constant_folding); in st_prog_to_nir_postprocess()
396 gl_nir_opts(nir); in st_prog_to_nir_postprocess()
397 st_finalize_nir_before_variants(nir); in st_prog_to_nir_postprocess()
400 char *msg = st_finalize_nir(st, prog, NULL, nir, true, true); in st_prog_to_nir_postprocess()
404 nir_validate_shader(nir, "after st/glsl finalize_nir"); in st_prog_to_nir_postprocess()
408 * Translate ARB (asm) program to NIR
417 /* Translate to NIR */ in st_translate_prog_to_nir()
418 nir_shader *nir = prog_to_nir(st->ctx, prog, options); in st_translate_prog_to_nir() local
420 st_prog_to_nir_postprocess(st, nir, prog); in st_translate_prog_to_nir()
422 return nir; in st_translate_prog_to_nir()
494 * Creates a driver shader from a NIR shader. Takes ownership of the
504 nir_shader *nir = state->ir.nir; in st_create_nir_shader() local
505 struct shader_info info = nir->info; in st_create_nir_shader()
506 gl_shader_stage stage = nir->info.stage; in st_create_nir_shader()
510 fprintf(stderr, "NIR before handing off to driver:\n"); in st_create_nir_shader()
511 nir_print_shader(nir, stderr); in st_create_nir_shader()
517 * is what radeonsi wants), but nir-to-tgsi requires lowered images. in st_create_nir_shader()
520 NIR_PASS_V(nir, gl_nir_lower_images, false); in st_create_nir_shader()
523 state->tokens = nir_to_tgsi(nir, screen); in st_create_nir_shader()
526 fprintf(stderr, "TGSI for driver after nir-to-tgsi:\n"); in st_create_nir_shader()
555 cs.prog = state->ir.nir; in st_create_nir_shader()
594 if (prog->nir) in st_translate_vertex_program()
595 ralloc_free(prog->nir); in st_translate_vertex_program()
603 prog->nir = st_translate_prog_to_nir(st, prog, in st_translate_vertex_program()
605 prog->info = prog->nir->info; in st_translate_vertex_program()
614 if (prog->nir) { in get_nir_shader()
615 nir_shader *nir = prog->nir; in get_nir_shader() local
617 /* The first shader variant takes ownership of NIR, so that there is in get_nir_shader()
619 * serialized NIR to save memory. in get_nir_shader()
621 prog->nir = NULL; in get_nir_shader()
623 return nir; in get_nir_shader()
636 struct nir_shader *nir, in lower_ucp() argument
640 if (nir->info.outputs_written & VARYING_BIT_CLIP_DIST0) in lower_ucp()
641 NIR_PASS_V(nir, nir_lower_clip_disable, ucp_enables); in lower_ucp()
660 if (nir->info.stage == MESA_SHADER_VERTEX || in lower_ucp()
661 nir->info.stage == MESA_SHADER_TESS_EVAL) { in lower_ucp()
662 NIR_PASS_V(nir, nir_lower_clip_vs, ucp_enables, in lower_ucp()
664 } else if (nir->info.stage == MESA_SHADER_GEOMETRY) { in lower_ucp()
665 NIR_PASS_V(nir, nir_lower_clip_gs, ucp_enables, in lower_ucp()
669 NIR_PASS_V(nir, nir_lower_io_to_temporaries, in lower_ucp()
670 nir_shader_get_entrypoint(nir), true, false); in lower_ucp()
671 NIR_PASS_V(nir, nir_lower_global_vars_to_local); in lower_ucp()
694 state.ir.nir = get_nir_shader(st, prog); in st_create_common_variant()
695 const nir_shader_compiler_options *options = ((nir_shader *)state.ir.nir)->options; in st_create_common_variant()
698 NIR_PASS_V(state.ir.nir, nir_lower_clamp_color_outputs); in st_create_common_variant()
702 NIR_PASS_V(state.ir.nir, nir_lower_passthrough_edgeflags); in st_create_common_variant()
709 NIR_PASS_V(state.ir.nir, nir_lower_point_size_mov, in st_create_common_variant()
717 lower_ucp(st, state.ir.nir, key->lower_ucp, params); in st_create_common_variant()
727 NIR_PASS_V(state.ir.nir, nir_lower_tex, &tex_opts); in st_create_common_variant()
731 char *msg = st_finalize_nir(st, prog, prog->shader_program, state.ir.nir, in st_create_common_variant()
744 nir_shader_gather_info(state.ir.nir, in st_create_common_variant()
745 nir_shader_get_entrypoint(state.ir.nir)); in st_create_common_variant()
826 * Translate a non-GLSL Mesa fragment shader into a NIR shader.
852 /* Translate to NIR. ATI_fs translates at variant time. */ in st_translate_fragment_program()
854 nir_shader *nir = in st_translate_fragment_program() local
857 if (fp->nir) in st_translate_fragment_program()
858 ralloc_free(fp->nir); in st_translate_fragment_program()
864 fp->nir = nir; in st_translate_fragment_program()
890 /* Translate ATI_fs to NIR at variant time because that's when we have the in st_create_fp_variant()
901 state.ir.nir = s; in st_create_fp_variant()
903 state.ir.nir = get_nir_shader(st, fp); in st_create_fp_variant()
910 NIR_PASS_V(state.ir.nir, nir_lower_clamp_color_outputs); in st_create_fp_variant()
915 NIR_PASS_V(state.ir.nir, nir_lower_flatshade); in st_create_fp_variant()
921 NIR_PASS_V(state.ir.nir, nir_lower_alpha_test, key->lower_alpha_func, in st_create_fp_variant()
928 NIR_PASS_V(state.ir.nir, nir_lower_two_sided_color, face_sysval); in st_create_fp_variant()
933 nir_shader *shader = state.ir.nir; in st_create_fp_variant()
941 NIR_PASS_V(state.ir.nir, nir_lower_texcoord_replace, in st_create_fp_variant()
952 NIR_PASS_V(state.ir.nir, nir_lower_tex, &tex_opts); in st_create_fp_variant()
966 NIR_PASS_V(state.ir.nir, nir_lower_bitmap, &options); in st_create_fp_variant()
1000 NIR_PASS_V(state.ir.nir, nir_lower_drawpixels, &options); in st_create_fp_variant()
1012 st_nir_lower_samplers(st->screen, state.ir.nir, in st_create_fp_variant()
1028 NIR_PASS_V(state.ir.nir, nir_lower_tex, &options); in st_create_fp_variant()
1034 char *msg = st_finalize_nir(st, fp, fp->shader_program, state.ir.nir, in st_create_fp_variant()
1041 NIR_PASS_V(state.ir.nir, st_nir_lower_tex_src_plane, in st_create_fp_variant()
1051 nir_shader_gather_info(state.ir.nir, in st_create_fp_variant()
1052 nir_shader_get_entrypoint(state.ir.nir)); in st_create_fp_variant()
1056 char *msg = screen->finalize_nir(screen, state.ir.nir); in st_create_fp_variant()
1226 nir_shader *nir = prog->nir; in st_can_add_pointsize_to_program() local
1227 if (!nir) in st_can_add_pointsize_to_program()
1229 assert(nir->info.stage == MESA_SHADER_VERTEX || in st_can_add_pointsize_to_program()
1230 nir->info.stage == MESA_SHADER_TESS_EVAL || in st_can_add_pointsize_to_program()
1231 nir->info.stage == MESA_SHADER_GEOMETRY); in st_can_add_pointsize_to_program()
1232 if (nir->info.outputs_written & VARYING_BIT_PSIZ) in st_can_add_pointsize_to_program()
1234 unsigned max_components = nir->info.stage == MESA_SHADER_GEOMETRY ? in st_can_add_pointsize_to_program()
1236 st->ctx->Const.Program[nir->info.stage].MaxOutputComponents; in st_can_add_pointsize_to_program()
1238 …unsigned needed_components = nir->info.stage == MESA_SHADER_GEOMETRY ? nir->info.gs.vertices_out :… in st_can_add_pointsize_to_program()
1239 nir_foreach_shader_out_variable(var, nir) { in st_can_add_pointsize_to_program()
1243 if (nir->info.stage == MESA_SHADER_GEOMETRY) { in st_can_add_pointsize_to_program()
1244 …if (num_components + needed_components > st->ctx->Const.Program[nir->info.stage].MaxOutputComponen… in st_can_add_pointsize_to_program()
1246 num_components *= nir->info.gs.vertices_out; in st_can_add_pointsize_to_program()
1311 nir_serialize(&blob, prog->nir, false); in st_serialize_nir()
1329 if (prog->nir) { in st_finalize_program()
1330 nir_sweep(prog->nir); in st_finalize_program()
1354 /* GLSL-to-NIR should not end up here. */ in st_program_string_notify()
1375 NIR_PASS_V(prog->nir, st_nir_add_point_size); in st_program_string_notify()