bool have_psiz = false;
ret->programs = _mesa_pointer_set_create(NULL);
+ simple_mtx_init(&ret->lock, mtx_plain);
nir_variable_mode indirect_derefs_modes = nir_var_function_temp;
if (nir->info.stage == MESA_SHADER_TESS_CTRL ||
unsigned vertices_per_patch = ctx->gfx_pipeline_state.vertices_per_patch;
struct zink_shader *ret = CALLOC_STRUCT(zink_shader);
ret->programs = _mesa_pointer_set_create(NULL);
+ simple_mtx_init(&ret->lock, mtx_plain);
nir_shader *nir = nir_shader_create(NULL, MESA_SHADER_TESS_CTRL, &zink_screen(ctx->base.screen)->nir_options, NULL);
nir_function *fn = nir_function_create(nir, "main");
_mesa_sha1_init(&sctx);
for (int i = 0; i < ZINK_SHADER_COUNT; ++i) {
if (prog->modules[i]) {
+ simple_mtx_lock(&prog->shaders[i]->lock);
_mesa_set_add(prog->shaders[i]->programs, prog);
+ simple_mtx_unlock(&prog->shaders[i]->lock);
zink_gfx_program_reference(screen, NULL, prog);
_mesa_sha1_update(&sctx, prog->shaders[i]->base.sha1, sizeof(prog->shaders[i]->base.sha1));
}