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