diff --git a/.pick_status.json b/.pick_status.json index d404fc70535..f67ee65dbeb 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -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 }, diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index c8fe93a9fbd..b2ecf0d447f 100644 --- a/src/intel/vulkan/anv_descriptor_set.c +++ b/src/intel/vulkan/anv_descriptor_set.c @@ -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; }