xref: /aosp_15_r20/external/mesa3d/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2016 Red Hat.
3  * Copyright © 2016 Bas Nieuwenhuizen
4  *
5  * based on amdgpu winsys.
6  * Copyright © 2011 Marek Olšák <[email protected]>
7  * Copyright © 2015 Advanced Micro Devices, Inc.
8  *
9  * SPDX-License-Identifier: MIT
10  */
11 
12 #ifndef RADV_AMDGPU_BO_H
13 #define RADV_AMDGPU_BO_H
14 
15 #include "radv_amdgpu_winsys.h"
16 
17 struct radv_amdgpu_winsys_bo_log {
18    struct list_head list;
19    uint64_t va;
20    uint64_t size;
21    uint64_t timestamp; /* CPU timestamp */
22    uint8_t is_virtual : 1;
23    uint8_t destroyed : 1;
24 };
25 
26 struct radv_amdgpu_map_range {
27    uint64_t offset;
28    uint64_t size;
29    struct radv_amdgpu_winsys_bo *bo;
30    uint64_t bo_offset;
31 };
32 
33 struct radv_amdgpu_winsys_bo {
34    struct radeon_winsys_bo base;
35    amdgpu_va_handle va_handle;
36    bool is_virtual;
37    uint8_t priority;
38 
39    union {
40       /* physical bo */
41       struct {
42          amdgpu_bo_handle bo;
43          uint32_t bo_handle;
44 
45          void *cpu_map;
46       };
47       /* virtual bo */
48       struct {
49          struct u_rwlock lock;
50 
51          struct radv_amdgpu_map_range *ranges;
52          uint32_t range_count;
53          uint32_t range_capacity;
54 
55          struct radv_amdgpu_winsys_bo **bos;
56          uint32_t bo_count;
57          uint32_t bo_capacity;
58       };
59    };
60 };
61 
62 static inline struct radv_amdgpu_winsys_bo *
radv_amdgpu_winsys_bo(struct radeon_winsys_bo * bo)63 radv_amdgpu_winsys_bo(struct radeon_winsys_bo *bo)
64 {
65    return (struct radv_amdgpu_winsys_bo *)bo;
66 }
67 
68 void radv_amdgpu_bo_init_functions(struct radv_amdgpu_winsys *ws);
69 
70 #endif /* RADV_AMDGPU_BO_H */
71