radv: Implement VK_EXT_shader_module_identifier.

Passes dEQP-VK.pipeline.*.shader_module_identifier.*

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17332>
This commit is contained in:
Hans-Kristian Arntzen
2022-07-01 12:02:35 +02:00
committed by Marge Bot
parent 0119de08f2
commit 9dbfc21ab9
6 changed files with 79 additions and 7 deletions

View File

@@ -202,10 +202,14 @@ radv_pipeline_destroy(struct radv_device *device, struct radv_pipeline *pipeline
free(library_pipeline->groups);
for (uint32_t i = 0; i < library_pipeline->stage_count; i++) {
RADV_FROM_HANDLE(vk_shader_module, module, library_pipeline->stages[i].module);
vk_object_base_finish(&module->base);
ralloc_free(module);
if (module) {
vk_object_base_finish(&module->base);
ralloc_free(module);
}
}
free(library_pipeline->stages);
free(library_pipeline->identifiers);
free(library_pipeline->hashes);
}
if (pipeline->slab)
@@ -4460,8 +4464,10 @@ radv_pipeline_stage_init(const VkPipelineShaderStageCreateInfo *sinfo,
{
const VkShaderModuleCreateInfo *minfo =
vk_find_struct_const(sinfo->pNext, SHADER_MODULE_CREATE_INFO);
const VkPipelineShaderStageModuleIdentifierCreateInfoEXT *iinfo =
vk_find_struct_const(sinfo->pNext, PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT);
if (sinfo->module == VK_NULL_HANDLE && !minfo)
if (sinfo->module == VK_NULL_HANDLE && !minfo && !iinfo)
return;
memset(out_stage, 0, sizeof(*out_stage));
@@ -4481,7 +4487,7 @@ radv_pipeline_stage_init(const VkPipelineShaderStageCreateInfo *sinfo,
if (module->nir)
out_stage->internal_nir = module->nir;
} else {
} else if (minfo) {
out_stage->spirv.data = (const char *) minfo->pCode;
out_stage->spirv.size = minfo->codeSize;
}