anv: handle spirv parsing failure

v2: don't leak spec_entries

v3: Also switch to VK_ERROR_UNKNOWN when parsing fails

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: mesa-stable
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10790>
(cherry picked from commit 938e52a6e8)
This commit is contained in:
Lionel Landwerlin 2021-05-13 22:48:15 +03:00 committed by Eric Engestrom
parent 1477627811
commit 64a2015902
2 changed files with 8 additions and 3 deletions

View file

@ -247,7 +247,7 @@
"description": "anv: handle spirv parsing failure",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"master_sha": null,
"because_sha": null
},

View file

@ -195,6 +195,11 @@ anv_shader_compile_to_nir(struct anv_device *device,
spirv_to_nir(spirv, module->size / 4,
spec_entries, num_spec_entries,
stage, entrypoint_name, &spirv_options, nir_options);
if (!nir) {
free(spec_entries);
return NULL;
}
assert(nir->info.stage == stage);
nir_validate_shader(nir, "after spirv_to_nir");
nir_validate_ssa_dominance(nir, "after spirv_to_nir");
@ -1431,7 +1436,7 @@ anv_pipeline_compile_graphics(struct anv_graphics_pipeline *pipeline,
pipeline_ctx,
&stages[s]);
if (stages[s].nir == NULL) {
result = vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
result = vk_error(VK_ERROR_UNKNOWN);
goto fail;
}
@ -1719,7 +1724,7 @@ anv_pipeline_compile_cs(struct anv_compute_pipeline *pipeline,
stage.nir = anv_pipeline_stage_get_nir(&pipeline->base, cache, mem_ctx, &stage);
if (stage.nir == NULL) {
ralloc_free(mem_ctx);
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
return vk_error(VK_ERROR_UNKNOWN);
}
NIR_PASS_V(stage.nir, anv_nir_add_base_work_group_id);