Lines Matching full:prog
73 struct gl_program *prog, in set_affected_state_flags() argument
82 if (prog->Parameters->NumParameters) in set_affected_state_flags()
85 if (prog->info.num_textures) in set_affected_state_flags()
88 if (prog->info.num_images) in set_affected_state_flags()
91 if (prog->info.num_ubos) in set_affected_state_flags()
94 if (prog->info.num_ssbos) in set_affected_state_flags()
97 if (prog->info.num_abos) in set_affected_state_flags()
105 st_set_prog_affected_state_flags(struct gl_program *prog) in st_set_prog_affected_state_flags() argument
109 switch (prog->info.stage) { in st_set_prog_affected_state_flags()
111 states = &prog->affected_states; in st_set_prog_affected_state_flags()
117 set_affected_state_flags(states, prog, in st_set_prog_affected_state_flags()
128 states = &prog->affected_states; in st_set_prog_affected_state_flags()
132 set_affected_state_flags(states, prog, in st_set_prog_affected_state_flags()
143 states = &prog->affected_states; in st_set_prog_affected_state_flags()
148 set_affected_state_flags(states, prog, in st_set_prog_affected_state_flags()
159 states = &prog->affected_states; in st_set_prog_affected_state_flags()
164 set_affected_state_flags(states, prog, in st_set_prog_affected_state_flags()
175 states = &prog->affected_states; in st_set_prog_affected_state_flags()
182 set_affected_state_flags(states, prog, in st_set_prog_affected_state_flags()
193 states = &prog->affected_states; in st_set_prog_affected_state_flags()
197 set_affected_state_flags(states, prog, in st_set_prog_affected_state_flags()
368 struct gl_program *prog) in st_prog_to_nir_postprocess() argument
383 NIR_PASS(_, nir, st_nir_lower_wpos_ytransform, prog, screen); in st_prog_to_nir_postprocess()
393 char *msg = st_finalize_nir(st, prog, NULL, nir, true, true); in st_prog_to_nir_postprocess()
404 st_translate_prog_to_nir(struct st_context *st, struct gl_program *prog, in st_translate_prog_to_nir() argument
408 st_get_nir_compiler_options(st, prog->info.stage); in st_translate_prog_to_nir()
411 nir_shader *nir = prog_to_nir(st->ctx, prog, options); in st_translate_prog_to_nir()
423 st_prepare_vertex_program(struct gl_program *prog) in st_prepare_vertex_program() argument
425 struct gl_vertex_program *stvp = (struct gl_vertex_program *)prog; in st_prepare_vertex_program()
427 stvp->num_inputs = util_bitcount64(prog->info.inputs_read); in st_prepare_vertex_program()
428 stvp->vert_attrib_mask = prog->info.inputs_read; in st_prepare_vertex_program()
434 if (prog->info.outputs_written & BITFIELD64_BIT(attr)) in st_prepare_vertex_program()
442 st_translate_stream_output_info(struct gl_program *prog) in st_translate_stream_output_info() argument
444 struct gl_transform_feedback_info *info = prog->sh.LinkedTransformFeedback; in st_translate_stream_output_info()
458 if (prog->skip_pointsize_xfb && attr == VARYING_SLOT_PSIZ) in st_translate_stream_output_info()
460 if (prog->info.outputs_written & BITFIELD64_BIT(attr)) in st_translate_stream_output_info()
466 &prog->state.stream_output; in st_translate_stream_output_info()
544 struct gl_program *prog) in st_translate_vertex_program() argument
549 prog->affected_states = ST_NEW_VS_STATE | in st_translate_vertex_program()
553 if (prog->Parameters->NumParameters) in st_translate_vertex_program()
554 prog->affected_states |= ST_NEW_VS_CONSTANTS; in st_translate_vertex_program()
556 if (prog->arb.Instructions && prog->nir) in st_translate_vertex_program()
557 ralloc_free(prog->nir); in st_translate_vertex_program()
559 if (prog->serialized_nir) { in st_translate_vertex_program()
560 free(prog->serialized_nir); in st_translate_vertex_program()
561 prog->serialized_nir = NULL; in st_translate_vertex_program()
564 prog->state.type = PIPE_SHADER_IR_NIR; in st_translate_vertex_program()
565 if (prog->arb.Instructions) in st_translate_vertex_program()
566 prog->nir = st_translate_prog_to_nir(st, prog, in st_translate_vertex_program()
568 st_prog_to_nir_postprocess(st, prog->nir, prog); in st_translate_vertex_program()
569 prog->info = prog->nir->info; in st_translate_vertex_program()
571 st_prepare_vertex_program(prog); in st_translate_vertex_program()
576 get_nir_shader(struct st_context *st, struct gl_program *prog) in get_nir_shader() argument
578 if (prog->nir) { in get_nir_shader()
579 nir_shader *nir = prog->nir; in get_nir_shader()
585 prog->nir = NULL; in get_nir_shader()
586 assert(prog->serialized_nir && prog->serialized_nir_size); in get_nir_shader()
592 st_get_nir_compiler_options(st, prog->info.stage); in get_nir_shader()
594 blob_reader_init(&blob_reader, prog->serialized_nir, prog->serialized_nir_size); in get_nir_shader()
641 struct gl_program *prog, in st_create_common_variant() argument
651 struct gl_program_parameter_list *params = prog->Parameters; in st_create_common_variant()
655 state.stream_output = prog->state.stream_output; in st_create_common_variant()
660 state.ir.nir = get_nir_shader(st, prog); in st_create_common_variant()
697 char *msg = st_finalize_nir(st, prog, prog->shader_program, state.ir.nir, in st_create_common_variant()
746 struct gl_program *prog, in st_get_common_variant() argument
752 for (v = st_common_variant(prog->variants); v; in st_get_common_variant()
760 if (prog->variants != NULL) { in st_get_common_variant()
763 _mesa_shader_stage_to_string(prog->info.stage), in st_get_common_variant()
773 v = st_create_common_variant(st, prog, key); in st_get_common_variant()
777 if (prog->info.stage == MESA_SHADER_VERTEX) { in st_get_common_variant()
778 struct gl_vertex_program *vp = (struct gl_vertex_program *)prog; in st_get_common_variant()
785 st_add_variant(&prog->variants, &v->base); in st_get_common_variant()
798 struct gl_program *prog) in st_translate_fragment_program() argument
805 prog->affected_states = ST_NEW_FS_STATE | in st_translate_fragment_program()
809 if (prog->ati_fs) { in st_translate_fragment_program()
811 prog->affected_states |= ST_NEW_FS_SAMPLER_VIEWS | in st_translate_fragment_program()
815 if (prog->SamplersUsed) in st_translate_fragment_program()
816 prog->affected_states |= ST_NEW_FS_SAMPLER_VIEWS | in st_translate_fragment_program()
821 if (prog->nir && prog->arb.Instructions) in st_translate_fragment_program()
822 ralloc_free(prog->nir); in st_translate_fragment_program()
824 if (prog->serialized_nir) { in st_translate_fragment_program()
825 free(prog->serialized_nir); in st_translate_fragment_program()
826 prog->serialized_nir = NULL; in st_translate_fragment_program()
829 prog->state.type = PIPE_SHADER_IR_NIR; in st_translate_fragment_program()
830 if (prog->arb.Instructions) { in st_translate_fragment_program()
831 prog->nir = st_translate_prog_to_nir(st, prog, in st_translate_fragment_program()
833 } else if (prog->ati_fs) { in st_translate_fragment_program()
837 assert(!prog->nir); in st_translate_fragment_program()
838 prog->nir = st_translate_atifs_program(prog->ati_fs, prog, options); in st_translate_fragment_program()
840 st_prog_to_nir_postprocess(st, prog->nir, prog); in st_translate_fragment_program()
842 prog->info = prog->nir->info; in st_translate_fragment_program()
843 if (prog->ati_fs) { in st_translate_fragment_program()
845 * prog has been generated. So we have to always declare a read of FOGC so in st_translate_fragment_program()
848 prog->info.inputs_read |= VARYING_BIT_FOGC; in st_translate_fragment_program()
1237 struct gl_program *prog) in st_precompile_shader_variant() argument
1239 switch (prog->Target) { in st_precompile_shader_variant()
1251 (prog->info.outputs_written & (VARYING_SLOT_COL0 | in st_precompile_shader_variant()
1259 st_get_common_variant(st, prog, &key); in st_precompile_shader_variant()
1270 if (prog->ati_fs) { in st_precompile_shader_variant()
1278 if (!prog->shader_program) in st_precompile_shader_variant()
1279 key.depth_textures = prog->ShadowSamplers; in st_precompile_shader_variant()
1281 st_get_fp_variant(st, prog, &key); in st_precompile_shader_variant()
1291 st_serialize_nir(struct gl_program *prog) in st_serialize_nir() argument
1293 if (!prog->serialized_nir) { in st_serialize_nir()
1298 nir_serialize(&blob, prog->nir, false); in st_serialize_nir()
1299 blob_finish_get_buffer(&blob, &prog->serialized_nir, &size); in st_serialize_nir()
1300 prog->serialized_nir_size = size; in st_serialize_nir()
1305 st_finalize_program(struct st_context *st, struct gl_program *prog) in st_finalize_program() argument
1312 if (prog->info.stage == MESA_SHADER_VERTEX) in st_finalize_program()
1313 is_bound = prog == ctx->VertexProgram._Current; in st_finalize_program()
1314 else if (prog->info.stage == MESA_SHADER_TESS_CTRL) in st_finalize_program()
1315 is_bound = prog == ctx->TessCtrlProgram._Current; in st_finalize_program()
1316 else if (prog->info.stage == MESA_SHADER_TESS_EVAL) in st_finalize_program()
1317 is_bound = prog == ctx->TessEvalProgram._Current; in st_finalize_program()
1318 else if (prog->info.stage == MESA_SHADER_GEOMETRY) in st_finalize_program()
1319 is_bound = prog == ctx->GeometryProgram._Current; in st_finalize_program()
1320 else if (prog->info.stage == MESA_SHADER_FRAGMENT) in st_finalize_program()
1321 is_bound = prog == ctx->FragmentProgram._Current; in st_finalize_program()
1322 else if (prog->info.stage == MESA_SHADER_COMPUTE) in st_finalize_program()
1323 is_bound = prog == ctx->ComputeProgram._Current; in st_finalize_program()
1326 if (prog->info.stage == MESA_SHADER_VERTEX) { in st_finalize_program()
1328 ctx->NewDriverState |= ST_NEW_VERTEX_PROGRAM(ctx, prog); in st_finalize_program()
1330 ctx->NewDriverState |= prog->affected_states; in st_finalize_program()
1334 if (prog->nir) { in st_finalize_program()
1335 nir_sweep(prog->nir); in st_finalize_program()
1341 st_serialize_nir(prog); in st_finalize_program()
1345 st_precompile_shader_variant(st, prog); in st_finalize_program()
1355 struct gl_program *prog ) in st_program_string_notify() argument
1360 assert(!prog->shader_program); in st_program_string_notify()
1362 st_release_variants(st, prog); in st_program_string_notify()
1366 if (!st_translate_fragment_program(st, prog)) in st_program_string_notify()
1369 if (!st_translate_vertex_program(st, prog)) in st_program_string_notify()
1372 gl_nir_can_add_pointsize_to_program(&st->ctx->Const, prog)) { in st_program_string_notify()
1373 prog->skip_pointsize_xfb = true; in st_program_string_notify()
1374 NIR_PASS(_, prog->nir, gl_nir_add_point_size); in st_program_string_notify()
1378 st_finalize_program(st, prog); in st_program_string_notify()