hk: Use the new buffer device address infrastructure

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:56:32 -06:00 committed by Marge Bot
parent 8ca0531485
commit b808277d09
3 changed files with 9 additions and 15 deletions

View file

@ -139,7 +139,7 @@ hk_CreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo,
return vk_errorf(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY,
"Sparse VMA allocation failed");
}
buffer->addr = buffer->va->addr;
buffer->vk.device_address = buffer->va->addr;
}
*pBuffer = hk_buffer_to_handle(buffer);
@ -254,13 +254,16 @@ hk_BindBufferMemory2(VkDevice device, uint32_t bindInfoCount,
VK_FROM_HANDLE(hk_device, dev, device);
size_t size = MIN2(mem->bo->size, buffer->va->size_B);
int ret = dev->dev.ops.bo_bind(
&dev->dev, mem->bo, buffer->addr, size, pBindInfos[i].memoryOffset,
&dev->dev, mem->bo, buffer->vk.device_address, size,
pBindInfos[i].memoryOffset,
ASAHI_BIND_READ | ASAHI_BIND_WRITE, false);
if (ret)
return VK_ERROR_UNKNOWN;
} else {
buffer->addr = mem->bo->va->addr + pBindInfos[i].memoryOffset;
assert(buffer->vk.device_address == 0);
buffer->vk.device_address =
mem->bo->va->addr + pBindInfos[i].memoryOffset;
}
const VkBindMemoryStatusKHR *status =
@ -271,15 +274,6 @@ hk_BindBufferMemory2(VkDevice device, uint32_t bindInfoCount,
return VK_SUCCESS;
}
VKAPI_ATTR VkDeviceAddress VKAPI_CALL
hk_GetBufferDeviceAddress(UNUSED VkDevice device,
const VkBufferDeviceAddressInfo *pInfo)
{
VK_FROM_HANDLE(hk_buffer, buffer, pInfo->buffer);
return hk_buffer_address(buffer, 0);
}
VKAPI_ATTR uint64_t VKAPI_CALL
hk_GetBufferOpaqueCaptureAddress(UNUSED VkDevice device,
const VkBufferDeviceAddressInfo *pInfo)

View file

@ -16,7 +16,6 @@ struct hk_physical_device;
struct hk_buffer {
struct vk_buffer vk;
uint64_t addr;
/** Reserved VA for sparse buffers, NULL otherwise. */
struct agx_va *va;
@ -28,7 +27,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(hk_buffer, vk.base, VkBuffer,
static inline uint64_t
hk_buffer_address(const struct hk_buffer *buffer, uint64_t offset)
{
return buffer->addr + offset;
return vk_buffer_address(&buffer->vk, offset);
}
static inline struct hk_addr_range

View file

@ -48,7 +48,8 @@ hk_cmd_bind_map_buffer(struct vk_command_buffer *vk_cmd,
if (unlikely(T.cpu == NULL))
return VK_ERROR_OUT_OF_POOL_MEMORY;
buffer->addr = T.gpu;
assert(buffer->vk.device_address == 0);
buffer->vk.device_address = T.gpu;
*map_out = T.cpu;
return VK_SUCCESS;
}