zink: store spirv onto zink_shader_object structs

this makes it convenient for reuse

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22725>
This commit is contained in:
Mike Blumenkrantz
2023-04-03 15:42:08 -04:00
committed by Marge Bot
parent a3730531af
commit 36b014b28d
3 changed files with 10 additions and 4 deletions
+6 -2
View File
@@ -3310,7 +3310,7 @@ zink_shader_spirv_compile(struct zink_screen *screen, struct zink_shader *zs, st
#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
@@ -3541,7 +3541,7 @@ compile_module(struct zink_screen *screen, struct zink_shader *zs, nir_shader *n
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;
}
@@ -3811,10 +3811,14 @@ zink_shader_compile_separate(struct zink_screen *screen, struct zink_shader *zs)
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;
}
+3 -2
View File
@@ -344,6 +344,7 @@ static void
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);
}
@@ -847,7 +848,7 @@ update_cs_shader_module(struct zink_context *ctx, struct zink_compute_program *c
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;
}
@@ -1298,7 +1299,7 @@ precompile_compute_job(void *data, void *gdata, int thread_index)
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);
+1
View File
@@ -738,6 +738,7 @@ struct zink_shader_object {
VkShaderEXT obj;
VkShaderModule mod;
};
struct spirv_shader *spirv;
};
struct zink_shader {