• Home
  • Raw
  • Download

Lines Matching refs:prog

110                           struct zink_shader *zs, struct zink_gfx_program *prog,  in gather_shader_module_info()  argument
120 …if (zs->can_inline && (screen->is_cpu || prog->inlined_variant_count[stage] < ZINK_MAX_INLINED_VAR… in gather_shader_module_info()
131 struct zink_shader *zs, struct zink_gfx_program *prog, in create_shader_module_for_stage() argument
153 … zm->obj = zink_shader_tcs_compile(screen, zs, patch_vertices, prog->base.uses_shobj, &prog->base); in create_shader_module_for_stage()
155 …mpile(screen, prog->base.uses_shobj, zs, zink_shader_blob_deserialize(screen, &prog->blobs[stage])… in create_shader_module_for_stage()
161 zm->shobj = prog->base.uses_shobj; in create_shader_module_for_stage()
186 … !shadow_needs_shader_swizzle && !inline_size && !util_dynarray_contains(&prog->shader_cache[stage… in create_shader_module_for_stage()
188 prog->inlined_variant_count[stage]++; in create_shader_module_for_stage()
189 …util_dynarray_append(&prog->shader_cache[stage][has_nonseamless ? 0 : !!nonseamless_size][!!inline… in create_shader_module_for_stage()
195 struct zink_shader *zs, struct zink_gfx_program *prog, in get_shader_module_for_stage() argument
208 …struct util_dynarray *shader_cache = &prog->shader_cache[stage][!has_nonseamless ? !!nonseamless_s… in get_shader_module_for_stage()
241 struct zink_shader *zs, struct zink_gfx_program *prog, in create_shader_module_for_stage_optimal() argument
249 if (zs == prog->last_vertex_stage) { in create_shader_module_for_stage_optimal()
271 … zm->obj = zink_shader_tcs_compile(screen, zs, patch_vertices, prog->base.uses_shobj, &prog->base); in create_shader_module_for_stage_optimal()
273 …zm->obj = zink_shader_compile(screen, prog->base.uses_shobj, zs, zink_shader_blob_deserialize(scre… in create_shader_module_for_stage_optimal()
274 …ink_shader_key*)key, shadow_needs_shader_swizzle ? &ctx->di.zs_swizzle[stage] : NULL, &prog->base); in create_shader_module_for_stage_optimal()
280 zm->shobj = prog->base.uses_shobj; in create_shader_module_for_stage_optimal()
291 zm->default_variant = !util_dynarray_contains(&prog->shader_cache[stage][0][0], void*); in create_shader_module_for_stage_optimal()
292 util_dynarray_append(&prog->shader_cache[stage][0][0], void*, zm); in create_shader_module_for_stage_optimal()
298 struct zink_shader *zs, struct zink_gfx_program *prog, in get_shader_module_for_stage_optimal() argument
307 if (zs == prog->last_vertex_stage) { in get_shader_module_for_stage_optimal()
317 struct util_dynarray *shader_cache = &prog->shader_cache[stage][0][0]; in get_shader_module_for_stage_optimal()
369 struct zink_gfx_program *prog, uint32_t mask, in update_gfx_shader_modules() argument
376 assert(prog->objs[MESA_SHADER_VERTEX].mod); in update_gfx_shader_modules()
377 uint32_t variant_hash = prog->last_variant_hash; in update_gfx_shader_modules()
378 prog->has_edgeflags = prog->shaders[MESA_SHADER_VERTEX]->has_edgeflags; in update_gfx_shader_modules()
383 assert(prog->shaders[i]); in update_gfx_shader_modules()
386 …gather_shader_module_info(ctx, screen, prog->shaders[i], prog, state, has_inline, has_nonseamless,… in update_gfx_shader_modules()
387 …zink_shader_module *zm = get_shader_module_for_stage(ctx, screen, prog->shaders[i], prog, i, state, in update_gfx_shader_modules()
390 zm = create_shader_module_for_stage(ctx, screen, prog->shaders[i], prog, i, state, in update_gfx_shader_modules()
393 if (prog->objs[i].mod == zm->obj.mod) in update_gfx_shader_modules()
395 prog->optimal_keys &= !prog->shaders[i]->non_fs.is_generated; in update_gfx_shader_modules()
396 variant_hash ^= prog->module_hash[i]; in update_gfx_shader_modules()
399 prog->objs[i] = zm->obj; in update_gfx_shader_modules()
400 prog->objects[i] = zm->obj.obj; in update_gfx_shader_modules()
401 prog->module_hash[i] = zm->hash; in update_gfx_shader_modules()
404 prog->inline_variants |= BITFIELD_BIT(i); in update_gfx_shader_modules()
406 prog->inline_variants &= ~BITFIELD_BIT(i); in update_gfx_shader_modules()
408 variant_hash ^= prog->module_hash[i]; in update_gfx_shader_modules()
413 prog->last_variant_hash = prog->default_variant_hash; in update_gfx_shader_modules()
415 prog->last_variant_hash = variant_hash; in update_gfx_shader_modules()
422 …t zink_context *ctx, struct zink_screen *screen, struct zink_gfx_program *prog, struct zink_gfx_pi… in generate_gfx_program_modules() argument
424 assert(!prog->objs[MESA_SHADER_VERTEX].mod); in generate_gfx_program_modules()
428 if (!(prog->stages_present & BITFIELD_BIT(i))) in generate_gfx_program_modules()
431 assert(prog->shaders[i]); in generate_gfx_program_modules()
434 gather_shader_module_info(ctx, screen, prog->shaders[i], prog, state, in generate_gfx_program_modules()
437 …k_shader_module *zm = create_shader_module_for_stage(ctx, screen, prog->shaders[i], prog, i, state, in generate_gfx_program_modules()
441 prog->objs[i] = zm->obj; in generate_gfx_program_modules()
442 prog->objects[i] = zm->obj.obj; in generate_gfx_program_modules()
443 prog->module_hash[i] = zm->hash; in generate_gfx_program_modules()
445 prog->inline_variants |= BITFIELD_BIT(i); in generate_gfx_program_modules()
447 variant_hash ^= prog->module_hash[i]; in generate_gfx_program_modules()
452 prog->last_variant_hash = variant_hash; in generate_gfx_program_modules()
454 prog->default_variant_hash = prog->last_variant_hash; in generate_gfx_program_modules()
458 …t zink_context *ctx, struct zink_screen *screen, struct zink_gfx_program *prog, struct zink_gfx_pi… in generate_gfx_program_modules_optimal() argument
460 assert(!prog->objs[MESA_SHADER_VERTEX].mod); in generate_gfx_program_modules_optimal()
462 if (!(prog->stages_present & BITFIELD_BIT(i))) in generate_gfx_program_modules_optimal()
465 assert(prog->shaders[i]); in generate_gfx_program_modules_optimal()
467 …module *zm = create_shader_module_for_stage_optimal(ctx, screen, prog->shaders[i], prog, i, state); in generate_gfx_program_modules_optimal()
468 prog->objs[i] = zm->obj; in generate_gfx_program_modules_optimal()
469 prog->objects[i] = zm->obj.obj; in generate_gfx_program_modules_optimal()
473 prog->last_variant_hash = state->optimal_key; in generate_gfx_program_modules_optimal()
575 update_gfx_program_nonseamless(struct zink_context *ctx, struct zink_gfx_program *prog, bool has_no… in update_gfx_program_nonseamless() argument
578 if (screen->driconf.inline_uniforms || prog->needs_inlining) in update_gfx_program_nonseamless()
579 update_gfx_shader_modules(ctx, screen, prog, in update_gfx_program_nonseamless()
580 … ctx->dirty_gfx_stages & prog->stages_present, &ctx->gfx_pipeline_state, in update_gfx_program_nonseamless()
583 update_gfx_shader_modules(ctx, screen, prog, in update_gfx_program_nonseamless()
584 … ctx->dirty_gfx_stages & prog->stages_present, &ctx->gfx_pipeline_state, in update_gfx_program_nonseamless()
589 update_gfx_program(struct zink_context *ctx, struct zink_gfx_program *prog) in update_gfx_program() argument
593 update_gfx_program_nonseamless(ctx, prog, true); in update_gfx_program()
595 update_gfx_program_nonseamless(ctx, prog, false); in update_gfx_program()
610 struct zink_gfx_program *prog = NULL; in zink_gfx_program_update() local
620 prog = (struct zink_gfx_program*)entry->data; in zink_gfx_program_update()
622 if (prog->stages_present & ~ctx->dirty_gfx_stages & BITFIELD_BIT(i)) in zink_gfx_program_update()
623 ctx->gfx_pipeline_state.modules[i] = prog->objs[i].mod; in zink_gfx_program_update()
626 ctx->dirty_gfx_stages |= prog->stages_present; in zink_gfx_program_update()
627 update_gfx_program(ctx, prog); in zink_gfx_program_update()
630prog = zink_create_gfx_program(ctx, ctx->gfx_stages, ctx->gfx_pipeline_state.dyn_state2.vertices_p… in zink_gfx_program_update()
631 zink_screen_get_pipeline_cache(zink_screen(ctx->base.screen), &prog->base, false); in zink_gfx_program_update()
632 _mesa_hash_table_insert_pre_hashed(ht, hash, prog->shaders, prog); in zink_gfx_program_update()
633 prog->base.removed = false; in zink_gfx_program_update()
634 … generate_gfx_program_modules(ctx, zink_screen(ctx->base.screen), prog, &ctx->gfx_pipeline_state); in zink_gfx_program_update()
637 if (prog && prog != ctx->curr_program) in zink_gfx_program_update()
638 zink_batch_reference_program(ctx, &prog->base); in zink_gfx_program_update()
639 ctx->curr_program = prog; in zink_gfx_program_update()
653 update_gfx_shader_module_optimal(struct zink_context *ctx, struct zink_gfx_program *prog, gl_shader… in update_gfx_shader_module_optimal() argument
657 util_queue_fence_wait(&prog->base.cache_fence); in update_gfx_shader_module_optimal()
658 …_module *zm = get_shader_module_for_stage_optimal(ctx, screen, prog->shaders[pstage], prog, pstage… in update_gfx_shader_module_optimal()
660 …zm = create_shader_module_for_stage_optimal(ctx, screen, prog->shaders[pstage], prog, pstage, &ctx… in update_gfx_shader_module_optimal()
664 bool changed = prog->objs[pstage].mod != zm->obj.mod; in update_gfx_shader_module_optimal()
665 prog->objs[pstage] = zm->obj; in update_gfx_shader_module_optimal()
666 prog->objects[pstage] = zm->obj.obj; in update_gfx_shader_module_optimal()
671 update_gfx_program_optimal(struct zink_context *ctx, struct zink_gfx_program *prog) in update_gfx_program_optimal() argument
674 …const union zink_shader_key_optimal *last_prog_key = (union zink_shader_key_optimal*)&prog->last_v… in update_gfx_program_optimal()
676 assert(!prog->is_separable); in update_gfx_program_optimal()
677 … bool changed = update_gfx_shader_module_optimal(ctx, prog, ctx->last_vertex_stage->info.stage); in update_gfx_program_optimal()
684 assert(!prog->is_separable); in update_gfx_program_optimal()
685 bool changed = update_gfx_shader_module_optimal(ctx, prog, MESA_SHADER_FRAGMENT); in update_gfx_program_optimal()
688 struct zink_shader_module **pzm = prog->shader_cache[MESA_SHADER_FRAGMENT][0][0].data; in update_gfx_program_optimal()
692 …if (prog->shaders[MESA_SHADER_TESS_CTRL] && prog->shaders[MESA_SHADER_TESS_CTRL]->non_fs.is_genera… in update_gfx_program_optimal()
694 assert(!prog->is_separable); in update_gfx_program_optimal()
695 bool changed = update_gfx_shader_module_optimal(ctx, prog, MESA_SHADER_TESS_CTRL); in update_gfx_program_optimal()
698 prog->last_variant_hash = ctx->gfx_pipeline_state.optimal_key; in update_gfx_program_optimal()
702 …e_separable_prog(struct zink_context *ctx, struct hash_entry *entry, struct zink_gfx_program *prog) in replace_separable_prog() argument
705 struct zink_gfx_program *real = prog->full_prog ? in replace_separable_prog()
706 prog->full_prog : in replace_separable_prog()
712 zink_gfx_program_reference(screen, &prog->full_prog, NULL); in replace_separable_prog()
713 prog->base.removed = true; in replace_separable_prog()
722 struct zink_gfx_program *prog = NULL; in zink_gfx_program_update_optimal() local
732 prog = (struct zink_gfx_program*)entry->data; in zink_gfx_program_update_optimal()
733 …bool must_replace = prog->base.uses_shobj ? !zink_can_use_shader_objects(ctx) : (prog->is_separabl… in zink_gfx_program_update_optimal()
734 if (prog->is_separable) { in zink_gfx_program_update_optimal()
737 util_queue_fence_wait(&prog->base.cache_fence); in zink_gfx_program_update_optimal()
739 if (util_queue_fence_is_signalled(&prog->base.cache_fence) && in zink_gfx_program_update_optimal()
742 prog = replace_separable_prog(ctx, entry, prog); in zink_gfx_program_update_optimal()
745 update_gfx_program_optimal(ctx, prog); in zink_gfx_program_update_optimal()
748prog = create_gfx_program_separable(ctx, ctx->gfx_stages, ctx->gfx_pipeline_state.dyn_state2.verti… in zink_gfx_program_update_optimal()
749 prog->base.removed = false; in zink_gfx_program_update_optimal()
750 _mesa_hash_table_insert_pre_hashed(ht, hash, prog->shaders, prog); in zink_gfx_program_update_optimal()
751 if (!prog->is_separable) { in zink_gfx_program_update_optimal()
752 zink_screen_get_pipeline_cache(screen, &prog->base, false); in zink_gfx_program_update_optimal()
754 generate_gfx_program_modules_optimal(ctx, screen, prog, &ctx->gfx_pipeline_state); in zink_gfx_program_update_optimal()
758 if (prog && prog != ctx->curr_program) in zink_gfx_program_update_optimal()
759 zink_batch_reference_program(ctx, &prog->base); in zink_gfx_program_update_optimal()
760 ctx->curr_program = prog; in zink_gfx_program_update_optimal()
769 struct zink_gfx_program *prog = ctx->curr_program; in zink_gfx_program_update_optimal() local
771 util_queue_fence_wait(&prog->base.cache_fence); in zink_gfx_program_update_optimal()
778 ctx->curr_program = replace_separable_prog(ctx, entry, prog); in zink_gfx_program_update_optimal()
797 …pipeline = zink_create_gfx_pipeline_combined(screen, pc_entry->prog, pc_entry->gpl.ikey->pipeline,… in optimized_compile_job()
799 …pipeline = zink_create_gfx_pipeline(screen, pc_entry->prog, pc_entry->prog->objs, &pc_entry->state… in optimized_compile_job()
817 …pc_entry->pipeline = zink_create_gfx_pipeline(screen, pc_entry->prog, objs, &pc_entry->state, NULL… in optimized_shobj_compile_job()
828 if (pc_entry->prog->base.uses_shobj) in zink_gfx_program_compile_queue()
834 … pc_entry->prog->base.uses_shobj ? optimized_shobj_compile_job : optimized_compile_job, NULL, 0); in zink_gfx_program_compile_queue()
844 struct zink_gfx_program *prog = (struct zink_gfx_program*)pg; in zink_program_finish() local
845 for (int r = 0; r < ARRAY_SIZE(prog->pipelines); ++r) { in zink_program_finish()
846 for (int i = 0; i < ARRAY_SIZE(prog->pipelines[0]); ++i) { in zink_program_finish()
847 hash_table_foreach(&prog->pipelines[r][i], entry) { in zink_program_finish()
1032 create_lib_cache(struct zink_gfx_program *prog, bool generated_tcs) in create_lib_cache() argument
1035 libs->stages_present = prog->stages_present; in create_lib_cache()
1047 find_or_create_lib_cache(struct zink_screen *screen, struct zink_gfx_program *prog) in find_or_create_lib_cache() argument
1049 unsigned stages_present = prog->stages_present; in find_or_create_lib_cache()
1050 …bool generated_tcs = prog->shaders[MESA_SHADER_TESS_CTRL] && prog->shaders[MESA_SHADER_TESS_CTRL]-… in find_or_create_lib_cache()
1055 const uint32_t hash = prog->gfx_hash; in find_or_create_lib_cache()
1059 struct set_entry *entry = _mesa_set_search_or_add_pre_hashed(ht, hash, prog->shaders, &found); in find_or_create_lib_cache()
1064 libs = create_lib_cache(prog, generated_tcs); in find_or_create_lib_cache()
1065 memcpy(libs->shaders, prog->shaders, sizeof(prog->shaders)); in find_or_create_lib_cache()
1069 if (prog->shaders[i] && (!generated_tcs || i != MESA_SHADER_TESS_CTRL)) { in find_or_create_lib_cache()
1070 simple_mtx_lock(&prog->shaders[i]->lock); in find_or_create_lib_cache()
1071 … util_dynarray_append(&prog->shaders[i]->pipeline_libs, struct zink_gfx_lib_cache*, libs); in find_or_create_lib_cache()
1072 simple_mtx_unlock(&prog->shaders[i]->lock); in find_or_create_lib_cache()
1089 struct zink_gfx_program *prog = create_program(ctx, false); in gfx_program_create() local
1090 if (!prog) in gfx_program_create()
1093 prog->gfx_hash = gfx_hash; in gfx_program_create()
1094 prog->base.removed = true; in gfx_program_create()
1095 prog->optimal_keys = screen->optimal_keys; in gfx_program_create()
1097 prog->has_edgeflags = prog->shaders[MESA_SHADER_VERTEX] && in gfx_program_create()
1098 prog->shaders[MESA_SHADER_VERTEX]->has_edgeflags; in gfx_program_create()
1100 util_dynarray_init(&prog->shader_cache[i][0][0], prog); in gfx_program_create()
1101 util_dynarray_init(&prog->shader_cache[i][0][1], prog); in gfx_program_create()
1102 util_dynarray_init(&prog->shader_cache[i][1][0], prog); in gfx_program_create()
1103 util_dynarray_init(&prog->shader_cache[i][1][1], prog); in gfx_program_create()
1105 prog->shaders[i] = stages[i]; in gfx_program_create()
1106 prog->stages_present |= BITFIELD_BIT(i); in gfx_program_create()
1108 prog->optimal_keys &= !prog->shaders[i]->non_fs.is_generated; in gfx_program_create()
1109 prog->needs_inlining |= prog->shaders[i]->needs_inlining; in gfx_program_create()
1114 if (!prog->shaders[MESA_SHADER_TESS_EVAL]->non_fs.generated_tcs) in gfx_program_create()
1115prog->shaders[MESA_SHADER_TESS_EVAL]->non_fs.generated_tcs = zink_shader_tcs_create(screen, vertic… in gfx_program_create()
1116prog->shaders[MESA_SHADER_TESS_CTRL] = prog->shaders[MESA_SHADER_TESS_EVAL]->non_fs.generated_tcs; in gfx_program_create()
1117 prog->stages_present |= BITFIELD_BIT(MESA_SHADER_TESS_CTRL); in gfx_program_create()
1119 prog->stages_remaining = prog->stages_present; in gfx_program_create()
1121 if (prog->shaders[i]) { in gfx_program_create()
1122 simple_mtx_lock(&prog->shaders[i]->lock); in gfx_program_create()
1123 _mesa_set_add(prog->shaders[i]->programs, prog); in gfx_program_create()
1124 simple_mtx_unlock(&prog->shaders[i]->lock); in gfx_program_create()
1125 zink_gfx_program_reference(screen, NULL, prog); in gfx_program_create()
1128 p_atomic_dec(&prog->base.reference.count); in gfx_program_create()
1131 prog->last_vertex_stage = stages[MESA_SHADER_GEOMETRY]; in gfx_program_create()
1133 prog->last_vertex_stage = stages[MESA_SHADER_TESS_EVAL]; in gfx_program_create()
1135 prog->last_vertex_stage = stages[MESA_SHADER_VERTEX]; in gfx_program_create()
1137 for (int r = 0; r < ARRAY_SIZE(prog->pipelines); ++r) { in gfx_program_create()
1138 for (int i = 0; i < ARRAY_SIZE(prog->pipelines[0]); ++i) { in gfx_program_create()
1139 …_mesa_hash_table_init(&prog->pipelines[r][i], prog, NULL, zink_get_gfx_pipeline_eq_func(screen, pr… in gfx_program_create()
1142 i == (prog->last_vertex_stage->info.stage == MESA_SHADER_TESS_EVAL ? 4 : 3)) in gfx_program_create()
1146 return prog; in gfx_program_create()
1149 if (prog) in gfx_program_create()
1150 zink_destroy_gfx_program(screen, prog); in gfx_program_create()
1156 gfx_program_init(struct zink_context *ctx, struct zink_gfx_program *prog) in gfx_program_init() argument
1163 if (prog->shaders[i]) { in gfx_program_init()
1164 util_queue_fence_wait(&prog->shaders[i]->precompile.fence); in gfx_program_init()
1166 …if (i == MESA_SHADER_TESS_CTRL && prog->shaders[i]->non_fs.is_generated && prog->shaders[MESA_SHAD… in gfx_program_init()
1167 …zink_shader_tcs_init(screen, prog->shaders[MESA_SHADER_TESS_CTRL], nir[MESA_SHADER_TESS_EVAL], &ni… in gfx_program_init()
1169 nir[i] = zink_shader_deserialize(screen, prog->shaders[i]); in gfx_program_init()
1177 zink_shader_serialize_blob(nir[i], &prog->blobs[i]); in gfx_program_init()
1182 prog->libs = find_or_create_lib_cache(screen, prog); in gfx_program_init()
1183 if (prog->libs) in gfx_program_init()
1184 p_atomic_inc(&prog->libs->refcount); in gfx_program_init()
1189 if (prog->shaders[i]) in gfx_program_init()
1190 … _mesa_blake3_update(&sctx, prog->shaders[i]->base.sha1, sizeof(prog->shaders[i]->base.sha1)); in gfx_program_init()
1192 _mesa_blake3_final(&sctx, prog->base.blake3); in gfx_program_init()
1194 if (!zink_descriptor_program_init(ctx, &prog->base)) in gfx_program_init()
1197 return prog; in gfx_program_init()
1200 if (prog) in gfx_program_init()
1201 zink_destroy_gfx_program(screen, prog); in gfx_program_init()
1211 struct zink_gfx_program *prog = gfx_program_create(ctx, stages, vertices_per_patch, gfx_hash); in zink_create_gfx_program() local
1212 if (prog) in zink_create_gfx_program()
1213 prog = gfx_program_init(ctx, prog); in zink_create_gfx_program()
1214 return prog; in zink_create_gfx_program()
1223 struct zink_gfx_program *prog = data; in create_linked_separable_job() local
1225 if (prog->base.removed) in create_linked_separable_job()
1227 prog->full_prog = gfx_program_create(prog->base.ctx, prog->shaders, 0, prog->gfx_hash); in create_linked_separable_job()
1229 util_queue_fence_reset(&prog->full_prog->base.cache_fence); in create_linked_separable_job()
1231 zink_gfx_program_reference(zink_screen(prog->base.ctx->base.screen), NULL, prog->full_prog); in create_linked_separable_job()
1233 if (prog->full_prog->stages_present == prog->full_prog->stages_remaining) in create_linked_separable_job()
1234 gfx_program_precompile_job(prog->full_prog, gdata, thread_index); in create_linked_separable_job()
1235 util_queue_fence_signal(&prog->full_prog->base.cache_fence); in create_linked_separable_job()
1260 struct zink_gfx_program *prog = create_program(ctx, false); in create_gfx_program_separable() local
1261 if (!prog) in create_gfx_program_separable()
1264 prog->is_separable = true; in create_gfx_program_separable()
1265 prog->gfx_hash = ctx->gfx_hash; in create_gfx_program_separable()
1266 prog->base.uses_shobj = screen->info.have_EXT_shader_object; in create_gfx_program_separable()
1268 prog->stages_remaining = prog->stages_present = ctx->shader_stages; in create_gfx_program_separable()
1269 memcpy(prog->shaders, stages, sizeof(prog->shaders)); in create_gfx_program_separable()
1270 prog->last_vertex_stage = ctx->last_vertex_stage; in create_gfx_program_separable()
1273 prog->shaders[MESA_SHADER_TESS_CTRL] = stages[MESA_SHADER_TESS_EVAL]->non_fs.generated_tcs; in create_gfx_program_separable()
1274 prog->stages_present |= BITFIELD_BIT(MESA_SHADER_TESS_CTRL); in create_gfx_program_separable()
1278 prog->libs = create_lib_cache(prog, false); in create_gfx_program_separable()
1280 p_atomic_set(&prog->libs->refcount, 1); in create_gfx_program_separable()
1285 if (prog->shaders[i]) { in create_gfx_program_separable()
1286 simple_mtx_lock(&prog->shaders[i]->lock); in create_gfx_program_separable()
1287 _mesa_set_add(prog->shaders[i]->programs, prog); in create_gfx_program_separable()
1288 simple_mtx_unlock(&prog->shaders[i]->lock); in create_gfx_program_separable()
1290 if (!prog->objects[i]) in create_gfx_program_separable()
1291 prog->objects[i] = prog->shaders[i]->precompile.obj.obj; in create_gfx_program_separable()
1299 p_atomic_add(&prog->base.reference.count, refs - 1); in create_gfx_program_separable()
1301 for (int r = 0; r < ARRAY_SIZE(prog->pipelines); ++r) { in create_gfx_program_separable()
1302 for (int i = 0; i < ARRAY_SIZE(prog->pipelines[0]); ++i) { in create_gfx_program_separable()
1303 …_mesa_hash_table_init(&prog->pipelines[r][i], prog, NULL, zink_get_gfx_pipeline_eq_func(screen, pr… in create_gfx_program_separable()
1306 i == (prog->last_vertex_stage->info.stage == MESA_SHADER_TESS_EVAL ? 4 : 3)) in create_gfx_program_separable()
1312 if (!prog->shaders[i] || !prog->shaders[i]->precompile.dsl) in create_gfx_program_separable()
1315 prog->base.dd.binding_usage |= BITFIELD_BIT(idx); in create_gfx_program_separable()
1316 prog->base.dsl[idx] = prog->shaders[i]->precompile.dsl; in create_gfx_program_separable()
1318 if (prog->shaders[i]->precompile.dsl) in create_gfx_program_separable()
1319 prog->base.num_dsl = idx + 1; in create_gfx_program_separable()
1320 prog->base.dd.bindless |= prog->shaders[i]->bindless; in create_gfx_program_separable()
1322 if (prog->base.dd.bindless) { in create_gfx_program_separable()
1323prog->base.num_dsl = screen->compact_descriptors ? ZINK_DESCRIPTOR_ALL_TYPES - ZINK_DESCRIPTOR_COM… in create_gfx_program_separable()
1324 prog->base.dsl[screen->desc_set_id[ZINK_DESCRIPTOR_BINDLESS]] = screen->bindless_layout; in create_gfx_program_separable()
1326prog->base.layout = zink_pipeline_layout_create(screen, prog->base.dsl, prog->base.num_dsl, false,… in create_gfx_program_separable()
1328 prog->last_variant_hash = ctx->gfx_pipeline_state.optimal_key; in create_gfx_program_separable()
1337 gkey->optimal_key = prog->last_variant_hash; in create_gfx_program_separable()
1339 …gkey->pipeline = zink_create_gfx_pipeline_combined(screen, prog, VK_NULL_HANDLE, libs, 2, VK_NULL_… in create_gfx_program_separable()
1340 _mesa_set_add(&prog->libs->libs, gkey); in create_gfx_program_separable()
1344 …util_queue_add_job(&screen->cache_get_thread, prog, &prog->base.cache_fence, create_linked_separab… in create_gfx_program_separable()
1346 return prog; in create_gfx_program_separable()
1348 if (prog) in create_gfx_program_separable()
1349 zink_destroy_gfx_program(screen, prog); in create_gfx_program_separable()
1601 struct zink_gfx_program *prog = (void*)pg; in zink_program_num_bindings_typed() local
1603 if (prog->shaders[i]) in zink_program_num_bindings_typed()
1604 num_bindings += get_num_bindings(prog->shaders[i], type); in zink_program_num_bindings_typed()
1633 struct zink_gfx_program *prog) in zink_destroy_gfx_program() argument
1635 unsigned max_idx = ARRAY_SIZE(prog->pipelines[0]); in zink_destroy_gfx_program()
1638 if ((prog->stages_present & in zink_destroy_gfx_program()
1647 if (prog->is_separable) in zink_destroy_gfx_program()
1648 zink_gfx_program_reference(screen, &prog->full_prog, NULL); in zink_destroy_gfx_program()
1649 for (unsigned r = 0; r < ARRAY_SIZE(prog->pipelines); r++) { in zink_destroy_gfx_program()
1651 hash_table_foreach(&prog->pipelines[r][i], entry) { in zink_destroy_gfx_program()
1662 deinit_program(screen, &prog->base); in zink_destroy_gfx_program()
1665 if (prog->shaders[i]) { in zink_destroy_gfx_program()
1666 _mesa_set_remove_key(prog->shaders[i]->programs, prog); in zink_destroy_gfx_program()
1667 prog->shaders[i] = NULL; in zink_destroy_gfx_program()
1669 if (!prog->is_separable) { in zink_destroy_gfx_program()
1670 destroy_shader_cache(screen, &prog->shader_cache[i][0][0]); in zink_destroy_gfx_program()
1671 destroy_shader_cache(screen, &prog->shader_cache[i][0][1]); in zink_destroy_gfx_program()
1672 destroy_shader_cache(screen, &prog->shader_cache[i][1][0]); in zink_destroy_gfx_program()
1673 destroy_shader_cache(screen, &prog->shader_cache[i][1][1]); in zink_destroy_gfx_program()
1674 blob_finish(&prog->blobs[i]); in zink_destroy_gfx_program()
1677 if (prog->libs) in zink_destroy_gfx_program()
1678 zink_gfx_lib_cache_unref(screen, prog->libs); in zink_destroy_gfx_program()
1680 ralloc_free(prog); in zink_destroy_gfx_program()
2061 nir = zink_tgsi_to_nir(pctx->screen, shader->prog); in zink_create_cs_state()
2063 nir = (struct nir_shader *)shader->prog; in zink_create_cs_state()
2129 zink_create_pipeline_lib(struct zink_screen *screen, struct zink_gfx_program *prog, struct zink_gfx… in zink_create_pipeline_lib() argument
2140 gkey->modules[i] = prog->objs[i].mod; in zink_create_pipeline_lib()
2141 gkey->pipeline = zink_create_gfx_pipeline_library(screen, prog); in zink_create_pipeline_lib()
2142 _mesa_set_add(&prog->libs->libs, gkey); in zink_create_pipeline_lib()
2174 struct zink_gfx_program *prog = data; in gfx_program_precompile_job() local
2177 gfx_program_init(prog->base.ctx, prog); in gfx_program_precompile_job()
2183 generate_gfx_program_modules_optimal(NULL, screen, prog, &state); in gfx_program_precompile_job()
2184 zink_screen_get_pipeline_cache(screen, &prog->base, true); in gfx_program_precompile_job()
2186 simple_mtx_lock(&prog->libs->lock); in gfx_program_precompile_job()
2187 zink_create_pipeline_lib(screen, prog, &state); in gfx_program_precompile_job()
2188 simple_mtx_unlock(&prog->libs->lock); in gfx_program_precompile_job()
2190 zink_screen_update_pipeline_cache(screen, &prog->base, true); in gfx_program_precompile_job()
2228 struct zink_gfx_program *prog = gfx_program_create(ctx, zshaders, 3, hash); in zink_link_gfx_shader() local
2230 assert(prog->shaders[i]); in zink_link_gfx_shader()
2231 _mesa_hash_table_insert_pre_hashed(ht, hash, prog->shaders, prog); in zink_link_gfx_shader()
2232 prog->base.removed = false; in zink_link_gfx_shader()
2236 gfx_program_init(ctx, prog); in zink_link_gfx_shader()
2238 generate_gfx_program_modules_optimal(ctx, screen, prog, &ctx->gfx_pipeline_state); in zink_link_gfx_shader()
2240 generate_gfx_program_modules(ctx, screen, prog, &ctx->gfx_pipeline_state); in zink_link_gfx_shader()
2241 … VkPipeline pipeline = zink_create_gfx_pipeline(screen, prog, prog->objs, &ctx->gfx_pipeline_state, in zink_link_gfx_shader()
2248prog->base.uses_shobj = !BITSET_TEST(zshaders[MESA_SHADER_FRAGMENT]->info.system_values_read, SYST… in zink_link_gfx_shader()
2250 gfx_program_precompile_job(prog, pctx->screen, 0); in zink_link_gfx_shader()
2252 …util_queue_add_job(&zink_screen(pctx->screen)->cache_get_thread, prog, &prog->base.cache_fence, gf… in zink_link_gfx_shader()