#endif
VkResult ret;
- struct zink_shader_object obj;
+ struct zink_shader_object obj = {0};
if (!can_shobj || !screen->info.have_EXT_shader_object)
ret = VKSCR(CreateShaderModule)(screen->dev, &smci, NULL, &obj.mod);
else
if (zs->info.stage == MESA_SHADER_TESS_CTRL && zs->non_fs.is_generated)
zs->spirv = spirv;
else
- ralloc_free(spirv);
+ obj.spirv = spirv;
return obj;
}
NIR_PASS_V(nir_clone, nir_remove_dead_variables, nir_var_shader_temp, NULL);
optimize_nir(nir_clone, NULL);
zs->precompile.no_psiz_obj = compile_module(screen, zs, nir_clone, true);
+ spirv_shader_delete(zs->precompile.no_psiz_obj.spirv);
+ zs->precompile.no_psiz_obj.spirv = NULL;
}
}
}
ralloc_free(nir);
+ spirv_shader_delete(obj.spirv);
+ obj.spirv = NULL;
return obj;
}
zink_destroy_shader_module(struct zink_screen *screen, struct zink_shader_module *zm)
{
VKSCR(DestroyShaderModule)(screen->dev, zm->obj.mod, NULL);
+ ralloc_free(zm->obj.spirv);
free(zm);
}
return;
}
zm->obj = zink_shader_compile(screen, zs, zink_shader_blob_deserialize(screen, &comp->shader->blob), key, zs_swizzle_size ? &ctx->di.zs_swizzle[MESA_SHADER_COMPUTE] : NULL);
- if (!zm->obj.mod) {
+ if (!zm->obj.spirv) {
FREE(zm);
return;
}
comp->module->obj = zink_shader_compile(screen, comp->shader, comp->nir, NULL, NULL);
/* comp->nir will be freed by zink_shader_compile */
comp->nir = NULL;
- assert(comp->module->obj.mod);
+ assert(comp->module->obj.spirv);
util_dynarray_init(&comp->shader_cache[0], comp);
util_dynarray_init(&comp->shader_cache[1], comp);