radv: add missing VkMemoryRangeBarriersInfoKHR from DAC

This is used to declare barrier dependencies for an addr range
(because no VkBuffer with DAC).

This fixes new dEQP-VK.api.device_address.misc.memory_range_barrier.

Fixes: a97c889a7b ("radv: implement VK_KHR_device_address_commands")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
(cherry picked from commit d1a428606e)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41268>
This commit is contained in:
Samuel Pitoiset 2026-04-27 12:05:41 +02:00 committed by Eric Engestrom
parent ab91484fb0
commit 94c81f2f60
2 changed files with 16 additions and 1 deletions

View file

@ -744,7 +744,7 @@
"description": "radv: add missing VkMemoryRangeBarriersInfoKHR from DAC",
"nominated": true,
"nomination_type": 2,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "a97c889a7b554009bb7c144d62437f35a593ad00",
"notes": null

View file

@ -15223,6 +15223,21 @@ radv_barrier(struct radv_cmd_buffer *cmd_buffer, uint32_t dep_count, const VkDep
}
has_image_transitions |= dep_info->imageMemoryBarrierCount > 0;
const VkMemoryRangeBarriersInfoKHR *mem_barriers_info =
vk_find_struct_const(dep_info->pNext, MEMORY_RANGE_BARRIERS_INFO_KHR);
if (mem_barriers_info) {
for (uint32_t i = 0; i < mem_barriers_info->memoryRangeBarrierCount; i++) {
const VkMemoryRangeBarrierKHR *barrier = &mem_barriers_info->pMemoryRangeBarriers[i];
src_stage_mask |= barrier->srcStageMask;
src_flush_bits |= radv_get_src_access_flush(cmd_buffer, barrier->srcStageMask, barrier->srcAccessMask, NULL,
NULL, barrier->pNext);
dst_stage_mask |= barrier->dstStageMask;
dst_flush_bits |= radv_get_dst_access_flush(cmd_buffer, barrier->dstStageMask, barrier->dstAccessMask, NULL,
NULL, barrier->pNext);
}
}
}
/* Only optimize BOTTOM_OF_PIPE/NONE as dst when there is no image layout transitions because it might