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