mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 22:30:12 +01:00
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:
parent
c44243099f
commit
73da18b956
2 changed files with 25 additions and 0 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue