Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 1 | /* |
| 2 | * Copyright © 2021 Collabora Ltd. |
| 3 | * SPDX-License-Identifier: MIT |
| 4 | */ |
| 5 | |
| 6 | #ifndef PANVK_DEVICE_H |
| 7 | #define PANVK_DEVICE_H |
| 8 | |
| 9 | #include <stdint.h> |
| 10 | |
| 11 | #include "vk_device.h" |
Boris Brezillon | 5067921 | 2024-04-29 10:21:28 +0200 | [diff] [blame] | 12 | #include "vk_meta.h" |
Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 13 | |
Boris Brezillon | 6724ee7 | 2024-02-06 15:36:56 +0100 | [diff] [blame] | 14 | #include "panvk_blend.h" |
Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 15 | #include "panvk_instance.h" |
| 16 | #include "panvk_macros.h" |
| 17 | #include "panvk_mempool.h" |
| 18 | #include "panvk_meta.h" |
| 19 | #include "panvk_physical_device.h" |
Chia-I Wu | 576a87a | 2024-11-25 21:15:51 -0800 | [diff] [blame] | 20 | #include "panvk_utrace_perfetto.h" |
Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 21 | |
| 22 | #include "kmod/pan_kmod.h" |
| 23 | #include "util/pan_ir.h" |
Chia-I Wu | d340ed6 | 2024-11-22 20:25:35 -0800 | [diff] [blame] | 24 | #include "util/perf/u_trace.h" |
Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 25 | |
Boris Brezillon | 53fb1d9 | 2024-08-20 14:56:38 +0200 | [diff] [blame] | 26 | #include "util/vma.h" |
| 27 | |
Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 28 | #define PANVK_MAX_QUEUE_FAMILIES 1 |
| 29 | |
| 30 | struct panvk_device { |
| 31 | struct vk_device vk; |
| 32 | |
| 33 | struct { |
Boris Brezillon | 22841ba | 2024-09-20 16:18:26 +0200 | [diff] [blame] | 34 | simple_mtx_t lock; |
Boris Brezillon | 53fb1d9 | 2024-08-20 14:56:38 +0200 | [diff] [blame] | 35 | struct util_vma_heap heap; |
| 36 | } as; |
| 37 | |
| 38 | struct { |
Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 39 | struct pan_kmod_vm *vm; |
| 40 | struct pan_kmod_dev *dev; |
| 41 | struct pan_kmod_allocator allocator; |
| 42 | } kmod; |
| 43 | |
| 44 | struct panvk_priv_bo *tiler_heap; |
| 45 | struct panvk_priv_bo *sample_positions; |
| 46 | |
Lars-Ivar Hesselberg Simonsen | afaf454 | 2024-10-28 15:54:34 +0100 | [diff] [blame] | 47 | struct { |
| 48 | struct panvk_priv_bo *handlers_bo; |
| 49 | uint32_t handler_stride; |
Boris Brezillon | 16dd990 | 2024-11-26 15:10:35 +0100 | [diff] [blame] | 50 | uint32_t dump_region_size; |
Lars-Ivar Hesselberg Simonsen | afaf454 | 2024-10-28 15:54:34 +0100 | [diff] [blame] | 51 | } tiler_oom; |
| 52 | |
Boris Brezillon | 5067921 | 2024-04-29 10:21:28 +0200 | [diff] [blame] | 53 | struct vk_meta_device meta; |
| 54 | |
Boris Brezillon | 5067921 | 2024-04-29 10:21:28 +0200 | [diff] [blame] | 55 | struct { |
Boris Brezillon | 2eaa437 | 2024-06-12 09:41:38 +0200 | [diff] [blame] | 56 | struct panvk_pool rw; |
Boris Brezillon | 7049d31 | 2024-08-31 11:52:42 +0200 | [diff] [blame] | 57 | struct panvk_pool rw_nc; |
Boris Brezillon | 2eaa437 | 2024-06-12 09:41:38 +0200 | [diff] [blame] | 58 | struct panvk_pool exec; |
| 59 | } mempools; |
| 60 | |
Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 61 | struct vk_device_dispatch_table cmd_dispatch; |
| 62 | |
| 63 | struct panvk_queue *queues[PANVK_MAX_QUEUE_FAMILIES]; |
| 64 | int queue_count[PANVK_MAX_QUEUE_FAMILIES]; |
| 65 | |
| 66 | struct { |
Chia-I Wu | d340ed6 | 2024-11-22 20:25:35 -0800 | [diff] [blame] | 67 | struct u_trace_context utctx; |
Chia-I Wu | 576a87a | 2024-11-25 21:15:51 -0800 | [diff] [blame] | 68 | #ifdef HAVE_PERFETTO |
| 69 | struct panvk_utrace_perfetto utp; |
| 70 | #endif |
Chia-I Wu | d340ed6 | 2024-11-22 20:25:35 -0800 | [diff] [blame] | 71 | } utrace; |
| 72 | |
| 73 | struct { |
Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 74 | struct pandecode_context *decode_ctx; |
| 75 | } debug; |
| 76 | }; |
| 77 | |
| 78 | VK_DEFINE_HANDLE_CASTS(panvk_device, vk.base, VkDevice, VK_OBJECT_TYPE_DEVICE) |
| 79 | |
| 80 | static inline struct panvk_device * |
| 81 | to_panvk_device(struct vk_device *dev) |
| 82 | { |
| 83 | return container_of(dev, struct panvk_device, vk); |
| 84 | } |
| 85 | |
Boris Brezillon | b7e0f14 | 2024-06-28 11:52:22 +0200 | [diff] [blame] | 86 | static inline uint32_t |
| 87 | panvk_device_adjust_bo_flags(const struct panvk_device *device, |
| 88 | uint32_t bo_flags) |
| 89 | { |
| 90 | struct panvk_instance *instance = |
| 91 | to_panvk_instance(device->vk.physical->instance); |
| 92 | |
Boris Brezillon | 343bff7 | 2024-09-06 16:00:14 +0200 | [diff] [blame] | 93 | if (instance->debug_flags & (PANVK_DEBUG_DUMP | PANVK_DEBUG_TRACE)) |
Boris Brezillon | b7e0f14 | 2024-06-28 11:52:22 +0200 | [diff] [blame] | 94 | bo_flags &= ~PAN_KMOD_BO_FLAG_NO_MMAP; |
| 95 | |
| 96 | return bo_flags; |
| 97 | } |
| 98 | |
Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 99 | #if PAN_ARCH |
| 100 | VkResult |
| 101 | panvk_per_arch(create_device)(struct panvk_physical_device *physical_device, |
| 102 | const VkDeviceCreateInfo *pCreateInfo, |
| 103 | const VkAllocationCallbacks *pAllocator, |
| 104 | VkDevice *pDevice); |
| 105 | |
| 106 | void panvk_per_arch(destroy_device)(struct panvk_device *device, |
| 107 | const VkAllocationCallbacks *pAllocator); |
Chia-I Wu | 1be7e2e | 2024-11-15 15:46:53 -0800 | [diff] [blame] | 108 | |
| 109 | #if PAN_ARCH >= 10 |
| 110 | VkResult panvk_per_arch(device_check_status)(struct vk_device *vk_dev); |
Chia-I Wu | 1be7e2e | 2024-11-15 15:46:53 -0800 | [diff] [blame] | 111 | |
Lars-Ivar Hesselberg Simonsen | afaf454 | 2024-10-28 15:54:34 +0100 | [diff] [blame] | 112 | VkResult panvk_per_arch(init_tiler_oom)(struct panvk_device *device); |
| 113 | #endif |
Boris Brezillon | 8157f51 | 2023-12-21 10:57:15 +0100 | [diff] [blame] | 114 | #endif |
| 115 | |
| 116 | #endif |