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 mali_ptr dev_addr; 34 } context; 35 }; 36 37 struct panvk_subqueue { 38 struct panvk_priv_mem context; 39 }; 40 41 struct panvk_desc_ringbuf { 42 struct panvk_priv_mem syncobj; 43 struct pan_kmod_bo *bo; 44 struct { 45 uint64_t dev; 46 void *host; 47 } addr; 48 }; 49 50 struct panvk_queue { 51 struct vk_queue vk; 52 53 uint32_t group_handle; 54 uint32_t syncobj_handle; 55 56 struct panvk_tiler_heap tiler_heap; 57 struct panvk_desc_ringbuf render_desc_ringbuf; 58 struct panvk_priv_mem syncobjs; 59 struct panvk_priv_mem debug_syncobjs; 60 61 struct panvk_subqueue subqueues[PANVK_SUBQUEUE_COUNT]; 62 }; 63 64 VK_DEFINE_HANDLE_CASTS(panvk_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE) 65 66 void panvk_per_arch(queue_finish)(struct panvk_queue *queue); 67 68 VkResult panvk_per_arch(queue_init)(struct panvk_device *device, 69 struct panvk_queue *queue, int idx, 70 const VkDeviceQueueCreateInfo *create_info); 71 72 #endif 73