panvk: Use the new buffer device address infrastructure

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:43:01 -06:00 committed by Marge Bot
parent 7900ff5c56
commit 8ca0531485
3 changed files with 12 additions and 17 deletions

View file

@ -12,20 +12,13 @@
#define PANVK_MAX_BUFFER_SIZE (1 << 30)
VKAPI_ATTR VkDeviceAddress VKAPI_CALL
panvk_GetBufferDeviceAddress(VkDevice _device,
const VkBufferDeviceAddressInfo *pInfo)
{
VK_FROM_HANDLE(panvk_buffer, buffer, pInfo->buffer);
return buffer->dev_addr;
}
VKAPI_ATTR uint64_t VKAPI_CALL
panvk_GetBufferOpaqueCaptureAddress(VkDevice _device,
const VkBufferDeviceAddressInfo *pInfo)
{
return panvk_GetBufferDeviceAddress(_device, pInfo);
VK_FROM_HANDLE(panvk_buffer, buffer, pInfo->buffer);
return buffer->vk.device_address;
}
VKAPI_ATTR void VKAPI_CALL
@ -71,8 +64,11 @@ panvk_BindBufferMemory2(VkDevice _device, uint32_t bindInfoCount,
assert(mem != NULL);
assert(buffer->bo == NULL);
assert(buffer->vk.device_address == 0);
buffer->bo = pan_kmod_bo_get(mem->bo);
buffer->dev_addr = mem->addr.dev + pBindInfos[i].memoryOffset;
buffer->vk.device_address = mem->addr.dev + pBindInfos[i].memoryOffset;
/* FIXME: Only host map for index buffers so we can do the min/max
* index retrieval on the CPU. This is all broken anyway and the

View file

@ -15,8 +15,6 @@ struct panvk_priv_bo;
struct panvk_buffer {
struct vk_buffer vk;
uint64_t dev_addr;
/* TODO: See if we can rework the synchronization logic so we don't need to
* pass BOs around.
*/
@ -38,17 +36,17 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer, vk.base, VkBuffer,
static inline uint64_t
panvk_buffer_gpu_ptr(const struct panvk_buffer *buffer, uint64_t offset)
{
if (!buffer->dev_addr)
if (!buffer->vk.device_address)
return 0;
return buffer->dev_addr + offset;
return vk_buffer_address(&buffer->vk, offset);
}
static inline uint64_t
panvk_buffer_range(const struct panvk_buffer *buffer, uint64_t offset,
uint64_t range)
{
if (!buffer->dev_addr)
if (!buffer->vk.device_address)
return 0;
return vk_buffer_range(&buffer->vk, offset, range);

View file

@ -122,7 +122,8 @@ panvk_meta_cmd_bind_map_buffer(struct vk_command_buffer *cmd,
if (!mem.gpu)
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
buffer->dev_addr = mem.gpu;
assert(buffer->vk.device_address == 0);
buffer->vk.device_address = mem.gpu;
*map_out = mem.cpu;
return VK_SUCCESS;
}