vulkan: Add device address helpers to vk_buffer

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33897>
This commit is contained in:
Faith Ekstrand 2025-03-05 09:37:10 -06:00 committed by Marge Bot
parent c44243099f
commit 73da18b956
2 changed files with 25 additions and 0 deletions

View file

@ -41,6 +41,7 @@ vk_buffer_init(struct vk_device *device,
buffer->create_flags = pCreateInfo->flags;
buffer->size = pCreateInfo->size;
buffer->usage = pCreateInfo->usage;
buffer->device_address = 0;
const VkBufferUsageFlags2CreateInfoKHR *usage2_info =
vk_find_struct_const(pCreateInfo->pNext,
@ -148,3 +149,12 @@ vk_common_BindBufferMemory(VkDevice _device,
return device->dispatch_table.BindBufferMemory2(_device, 1, &bind);
}
VKAPI_ATTR VkDeviceAddress VKAPI_CALL
vk_common_GetBufferDeviceAddress(UNUSED VkDevice device,
const VkBufferDeviceAddressInfo *pInfo)
{
VK_FROM_HANDLE(vk_buffer, buffer, pInfo->buffer);
return buffer->device_address;
}

View file

@ -40,6 +40,13 @@ struct vk_buffer {
/** VkBufferCreateInfo::usage or VkBufferUsageFlags2CreateInfoKHR::usage */
VkBufferUsageFlags2KHR usage;
/** Set by the implementation
*
* The implementation must set this at creation for sparse buffers or can
* delay as far as the bind for non-sparse buffers.
*/
VkDeviceAddress device_address;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vk_buffer, base, VkBuffer,
VK_OBJECT_TYPE_BUFFER);
@ -57,6 +64,14 @@ void vk_buffer_destroy(struct vk_device *device,
const VkAllocationCallbacks *alloc,
struct vk_buffer *buffer);
static inline VkDeviceAddress
vk_buffer_address(const struct vk_buffer *buffer,
VkDeviceSize offset)
{
assert(buffer->device_address != 0);
return buffer->device_address + offset;
}
static inline uint64_t
vk_buffer_range(const struct vk_buffer *buffer,
uint64_t offset, uint64_t range)