diff --git a/src/panfrost/vulkan/panvk_buffer.c b/src/panfrost/vulkan/panvk_buffer.c index 4122125bd42..7d279cb47b5 100644 --- a/src/panfrost/vulkan/panvk_buffer.c +++ b/src/panfrost/vulkan/panvk_buffer.c @@ -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 diff --git a/src/panfrost/vulkan/panvk_buffer.h b/src/panfrost/vulkan/panvk_buffer.h index 7362e9b5df3..aa787e20180 100644 --- a/src/panfrost/vulkan/panvk_buffer.h +++ b/src/panfrost/vulkan/panvk_buffer.h @@ -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); diff --git a/src/panfrost/vulkan/panvk_vX_device.c b/src/panfrost/vulkan/panvk_vX_device.c index ecce8fec733..14afb9cbce2 100644 --- a/src/panfrost/vulkan/panvk_vX_device.c +++ b/src/panfrost/vulkan/panvk_vX_device.c @@ -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; }