mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 07:10:09 +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->create_flags = pCreateInfo->flags;
|
||||||
buffer->size = pCreateInfo->size;
|
buffer->size = pCreateInfo->size;
|
||||||
buffer->usage = pCreateInfo->usage;
|
buffer->usage = pCreateInfo->usage;
|
||||||
|
buffer->device_address = 0;
|
||||||
|
|
||||||
const VkBufferUsageFlags2CreateInfoKHR *usage2_info =
|
const VkBufferUsageFlags2CreateInfoKHR *usage2_info =
|
||||||
vk_find_struct_const(pCreateInfo->pNext,
|
vk_find_struct_const(pCreateInfo->pNext,
|
||||||
|
|
@ -148,3 +149,12 @@ vk_common_BindBufferMemory(VkDevice _device,
|
||||||
|
|
||||||
return device->dispatch_table.BindBufferMemory2(_device, 1, &bind);
|
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 */
|
/** VkBufferCreateInfo::usage or VkBufferUsageFlags2CreateInfoKHR::usage */
|
||||||
VkBufferUsageFlags2KHR 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_DEFINE_NONDISP_HANDLE_CASTS(vk_buffer, base, VkBuffer,
|
||||||
VK_OBJECT_TYPE_BUFFER);
|
VK_OBJECT_TYPE_BUFFER);
|
||||||
|
|
@ -57,6 +64,14 @@ void vk_buffer_destroy(struct vk_device *device,
|
||||||
const VkAllocationCallbacks *alloc,
|
const VkAllocationCallbacks *alloc,
|
||||||
struct vk_buffer *buffer);
|
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
|
static inline uint64_t
|
||||||
vk_buffer_range(const struct vk_buffer *buffer,
|
vk_buffer_range(const struct vk_buffer *buffer,
|
||||||
uint64_t offset, uint64_t range)
|
uint64_t offset, uint64_t range)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue