anv: clear descriptorsets if AllocateDescriptorSets fails

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7285
Cc: mesa-stable
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18719>
(cherry picked from commit 369c12e5be)
This commit is contained in:
Lionel Landwerlin
2022-09-21 01:20:40 +03:00
committed by Dylan Baker
parent c0c5ced0d5
commit ed090af4dc
2 changed files with 13 additions and 2 deletions

View File

@@ -2893,7 +2893,7 @@
"description": "anv: clear descriptorsets if AllocateDescriptorSets fails",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null
},

View File

@@ -1305,9 +1305,20 @@ VkResult anv_AllocateDescriptorSets(
pDescriptorSets[i] = anv_descriptor_set_to_handle(set);
}
if (result != VK_SUCCESS)
if (result != VK_SUCCESS) {
anv_FreeDescriptorSets(_device, pAllocateInfo->descriptorPool,
i, pDescriptorSets);
/* The Vulkan 1.3.228 spec, section 14.2.3. Allocation of Descriptor Sets:
*
* "If the creation of any of those descriptor sets fails, then the
* implementation must destroy all successfully created descriptor
* set objects from this command, set all entries of the
* pDescriptorSets array to VK_NULL_HANDLE and return the error."
*/
for (i = 0; i < pAllocateInfo->descriptorSetCount; i++)
pDescriptorSets[i] = VK_NULL_HANDLE;
}
return result;
}