1 /* 2 * Copyright © 2021 Collabora Ltd. 3 * SPDX-License-Identifier: MIT 4 */ 5 6 #ifndef PANVK_QUEUE_H 7 #define PANVK_QUEUE_H 8 9 #ifndef PAN_ARCH 10 #error "PAN_ARCH must be defined" 11 #endif 12 13 #include "genxml/gen_macros.h" 14 15 #include <stdint.h> 16 17 #include "panvk_device.h" 18 19 #include "vk_queue.h" 20 21 enum panvk_subqueue_id { 22 PANVK_SUBQUEUE_VERTEX_TILER = 0, 23 PANVK_SUBQUEUE_FRAGMENT, 24 PANVK_SUBQUEUE_COMPUTE, 25 PANVK_SUBQUEUE_COUNT, 26 }; 27 28 struct panvk_tiler_heap { 29 uint32_t chunk_size; 30 struct panvk_priv_mem desc; 31 struct { 32 uint32_t handle; 33 uint64_t dev_addr; 34 } context; 35 }; 36 37 struct panvk_subqueue { 38 struct panvk_priv_mem context; 39 uint32_t *reg_file; 40 41 struct { 42 struct pan_kmod_bo *bo; 43 size_t size; 44 struct { 45 uint64_t dev; 46 void *host; 47 } addr; 48 } tracebuf; 49 }; 50 51 struct panvk_desc_ringbuf { 52 struct panvk_priv_mem syncobj; 53 struct pan_kmod_bo *bo; 54 size_t size; 55 struct { 56 uint64_t dev; 57 void *host; 58 } addr; 59 }; 60 61 struct panvk_queue { 62 struct vk_queue vk; 63 64 uint32_t group_handle; 65 uint32_t syncobj_handle; 66 67 struct panvk_tiler_heap tiler_heap; 68 struct panvk_desc_ringbuf render_desc_ringbuf; 69 struct panvk_priv_mem syncobjs; 70 struct panvk_priv_mem debug_syncobjs; 71 struct panvk_priv_mem tiler_oom_regs_save; 72 73 struct { 74 struct vk_sync *sync; 75 uint64_t next_value; 76 } utrace; 77 78 struct panvk_subqueue subqueues[PANVK_SUBQUEUE_COUNT]; 79 }; 80 81 VK_DEFINE_HANDLE_CASTS(panvk_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE) 82 83 void panvk_per_arch(queue_finish)(struct panvk_queue *queue); 84 85 VkResult panvk_per_arch(queue_init)(struct panvk_device *device, 86 struct panvk_queue *queue, int idx, 87 const VkDeviceQueueCreateInfo *create_info); 88 89 VkResult panvk_per_arch(queue_check_status)(struct panvk_queue *queue); 90 91 #endif 92