xref: /aosp_15_r20/external/mesa3d/src/panfrost/vulkan/panvk_device.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2021 Collabora Ltd.
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #ifndef PANVK_DEVICE_H
7*61046927SAndroid Build Coastguard Worker #define PANVK_DEVICE_H
8*61046927SAndroid Build Coastguard Worker 
9*61046927SAndroid Build Coastguard Worker #include <stdint.h>
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker #include "vk_device.h"
12*61046927SAndroid Build Coastguard Worker #include "vk_meta.h"
13*61046927SAndroid Build Coastguard Worker 
14*61046927SAndroid Build Coastguard Worker #include "panvk_blend.h"
15*61046927SAndroid Build Coastguard Worker #include "panvk_instance.h"
16*61046927SAndroid Build Coastguard Worker #include "panvk_macros.h"
17*61046927SAndroid Build Coastguard Worker #include "panvk_mempool.h"
18*61046927SAndroid Build Coastguard Worker #include "panvk_meta.h"
19*61046927SAndroid Build Coastguard Worker #include "panvk_physical_device.h"
20*61046927SAndroid Build Coastguard Worker 
21*61046927SAndroid Build Coastguard Worker #include "kmod/pan_kmod.h"
22*61046927SAndroid Build Coastguard Worker #include "util/pan_ir.h"
23*61046927SAndroid Build Coastguard Worker #include "pan_blend.h"
24*61046927SAndroid Build Coastguard Worker #include "pan_blitter.h"
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker #include "util/vma.h"
27*61046927SAndroid Build Coastguard Worker 
28*61046927SAndroid Build Coastguard Worker #define PANVK_MAX_QUEUE_FAMILIES 1
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker struct panvk_device {
31*61046927SAndroid Build Coastguard Worker    struct vk_device vk;
32*61046927SAndroid Build Coastguard Worker 
33*61046927SAndroid Build Coastguard Worker    struct {
34*61046927SAndroid Build Coastguard Worker       struct util_vma_heap heap;
35*61046927SAndroid Build Coastguard Worker    } as;
36*61046927SAndroid Build Coastguard Worker 
37*61046927SAndroid Build Coastguard Worker    struct {
38*61046927SAndroid Build Coastguard Worker       struct pan_kmod_vm *vm;
39*61046927SAndroid Build Coastguard Worker       struct pan_kmod_dev *dev;
40*61046927SAndroid Build Coastguard Worker       struct pan_kmod_allocator allocator;
41*61046927SAndroid Build Coastguard Worker    } kmod;
42*61046927SAndroid Build Coastguard Worker 
43*61046927SAndroid Build Coastguard Worker    struct panvk_priv_bo *tiler_heap;
44*61046927SAndroid Build Coastguard Worker    struct panvk_priv_bo *sample_positions;
45*61046927SAndroid Build Coastguard Worker 
46*61046927SAndroid Build Coastguard Worker    /* Access to the blitter pools are protected by the blitter
47*61046927SAndroid Build Coastguard Worker     * shader/rsd locks. They can't be merged with other binary/desc
48*61046927SAndroid Build Coastguard Worker     * pools unless we patch pan_blitter.c to support external pool locks.
49*61046927SAndroid Build Coastguard Worker     *
50*61046927SAndroid Build Coastguard Worker     * FIXME: The blitter infrastructure is only needed for FB preload.
51*61046927SAndroid Build Coastguard Worker     * We should probably consider getting rid of the dependency we have
52*61046927SAndroid Build Coastguard Worker     * on pan_desc.c and implement preload ourselves so we don't have
53*61046927SAndroid Build Coastguard Worker     * to duplicate caches.
54*61046927SAndroid Build Coastguard Worker     */
55*61046927SAndroid Build Coastguard Worker    struct {
56*61046927SAndroid Build Coastguard Worker       struct panvk_pool bin_pool;
57*61046927SAndroid Build Coastguard Worker       struct panvk_pool desc_pool;
58*61046927SAndroid Build Coastguard Worker       struct pan_blitter_cache cache;
59*61046927SAndroid Build Coastguard Worker       struct pan_blend_shader_cache blend_shader_cache;
60*61046927SAndroid Build Coastguard Worker    } blitter;
61*61046927SAndroid Build Coastguard Worker 
62*61046927SAndroid Build Coastguard Worker    struct panvk_blend_shader_cache blend_shader_cache;
63*61046927SAndroid Build Coastguard Worker    struct vk_meta_device meta;
64*61046927SAndroid Build Coastguard Worker 
65*61046927SAndroid Build Coastguard Worker    struct {
66*61046927SAndroid Build Coastguard Worker       struct panvk_priv_mem shader;
67*61046927SAndroid Build Coastguard Worker       struct panvk_priv_mem rsd;
68*61046927SAndroid Build Coastguard Worker    } desc_copy;
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker    struct {
71*61046927SAndroid Build Coastguard Worker       struct panvk_pool rw;
72*61046927SAndroid Build Coastguard Worker       struct panvk_pool rw_nc;
73*61046927SAndroid Build Coastguard Worker       struct panvk_pool exec;
74*61046927SAndroid Build Coastguard Worker    } mempools;
75*61046927SAndroid Build Coastguard Worker 
76*61046927SAndroid Build Coastguard Worker    struct vk_device_dispatch_table cmd_dispatch;
77*61046927SAndroid Build Coastguard Worker 
78*61046927SAndroid Build Coastguard Worker    struct panvk_queue *queues[PANVK_MAX_QUEUE_FAMILIES];
79*61046927SAndroid Build Coastguard Worker    int queue_count[PANVK_MAX_QUEUE_FAMILIES];
80*61046927SAndroid Build Coastguard Worker 
81*61046927SAndroid Build Coastguard Worker    struct {
82*61046927SAndroid Build Coastguard Worker       struct pandecode_context *decode_ctx;
83*61046927SAndroid Build Coastguard Worker    } debug;
84*61046927SAndroid Build Coastguard Worker };
85*61046927SAndroid Build Coastguard Worker 
86*61046927SAndroid Build Coastguard Worker VK_DEFINE_HANDLE_CASTS(panvk_device, vk.base, VkDevice, VK_OBJECT_TYPE_DEVICE)
87*61046927SAndroid Build Coastguard Worker 
88*61046927SAndroid Build Coastguard Worker static inline struct panvk_device *
to_panvk_device(struct vk_device * dev)89*61046927SAndroid Build Coastguard Worker to_panvk_device(struct vk_device *dev)
90*61046927SAndroid Build Coastguard Worker {
91*61046927SAndroid Build Coastguard Worker    return container_of(dev, struct panvk_device, vk);
92*61046927SAndroid Build Coastguard Worker }
93*61046927SAndroid Build Coastguard Worker 
94*61046927SAndroid Build Coastguard Worker static inline uint32_t
panvk_device_adjust_bo_flags(const struct panvk_device * device,uint32_t bo_flags)95*61046927SAndroid Build Coastguard Worker panvk_device_adjust_bo_flags(const struct panvk_device *device,
96*61046927SAndroid Build Coastguard Worker                              uint32_t bo_flags)
97*61046927SAndroid Build Coastguard Worker {
98*61046927SAndroid Build Coastguard Worker    struct panvk_instance *instance =
99*61046927SAndroid Build Coastguard Worker       to_panvk_instance(device->vk.physical->instance);
100*61046927SAndroid Build Coastguard Worker 
101*61046927SAndroid Build Coastguard Worker    if (instance->debug_flags & (PANVK_DEBUG_DUMP | PANVK_DEBUG_TRACE))
102*61046927SAndroid Build Coastguard Worker       bo_flags &= ~PAN_KMOD_BO_FLAG_NO_MMAP;
103*61046927SAndroid Build Coastguard Worker 
104*61046927SAndroid Build Coastguard Worker    return bo_flags;
105*61046927SAndroid Build Coastguard Worker }
106*61046927SAndroid Build Coastguard Worker 
107*61046927SAndroid Build Coastguard Worker #if PAN_ARCH
108*61046927SAndroid Build Coastguard Worker VkResult
109*61046927SAndroid Build Coastguard Worker panvk_per_arch(create_device)(struct panvk_physical_device *physical_device,
110*61046927SAndroid Build Coastguard Worker                               const VkDeviceCreateInfo *pCreateInfo,
111*61046927SAndroid Build Coastguard Worker                               const VkAllocationCallbacks *pAllocator,
112*61046927SAndroid Build Coastguard Worker                               VkDevice *pDevice);
113*61046927SAndroid Build Coastguard Worker 
114*61046927SAndroid Build Coastguard Worker void panvk_per_arch(destroy_device)(struct panvk_device *device,
115*61046927SAndroid Build Coastguard Worker                                     const VkAllocationCallbacks *pAllocator);
116*61046927SAndroid Build Coastguard Worker #endif
117*61046927SAndroid Build Coastguard Worker 
118*61046927SAndroid Build Coastguard Worker #endif
119