xref: /aosp_15_r20/external/mesa3d/src/asahi/vulkan/hk_buffer.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright 2024 Valve Corporation
3  * Copyright 2024 Alyssa Rosenzweig
4  * Copyright 2022-2023 Collabora Ltd. and Red Hat Inc.
5  * SPDX-License-Identifier: MIT
6  */
7 #pragma once
8 
9 #include "hk_device_memory.h"
10 #include "hk_private.h"
11 
12 #include "vk_buffer.h"
13 
14 struct hk_device_memory;
15 struct hk_physical_device;
16 
17 struct hk_buffer {
18    struct vk_buffer vk;
19    uint64_t addr;
20 
21    /** Reserved VA for sparse buffers, NULL otherwise. */
22    struct agx_va *va;
23 };
24 
25 VK_DEFINE_NONDISP_HANDLE_CASTS(hk_buffer, vk.base, VkBuffer,
26                                VK_OBJECT_TYPE_BUFFER)
27 
28 static inline uint64_t
hk_buffer_address(const struct hk_buffer * buffer,uint64_t offset)29 hk_buffer_address(const struct hk_buffer *buffer, uint64_t offset)
30 {
31    return buffer->addr + offset;
32 }
33 
34 static inline struct hk_addr_range
hk_buffer_addr_range(const struct hk_buffer * buffer,uint64_t offset,uint64_t range)35 hk_buffer_addr_range(const struct hk_buffer *buffer, uint64_t offset,
36                      uint64_t range)
37 {
38    if (buffer == NULL)
39       return (struct hk_addr_range){.range = 0};
40 
41    return (struct hk_addr_range){
42       .addr = hk_buffer_address(buffer, offset),
43       .range = vk_buffer_range(&buffer->vk, offset, range),
44    };
45 }
46