mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 11:30:21 +01:00
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:
parent
7900ff5c56
commit
8ca0531485
3 changed files with 12 additions and 17 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue