1 /* 2 * Copyright © 2022 Collabora Ltd. and Red Hat Inc. 3 * SPDX-License-Identifier: MIT 4 */ 5 #ifndef NVK_DEVICE_H 6 #define NVK_DEVICE_H 1 7 8 #include "nvk_private.h" 9 10 #include "nvk_edb_bview_cache.h" 11 #include "nvk_descriptor_table.h" 12 #include "nvk_heap.h" 13 #include "nvk_queue.h" 14 #include "nvk_upload_queue.h" 15 #include "vk_device.h" 16 #include "vk_meta.h" 17 #include "vk_queue.h" 18 19 struct nvk_physical_device; 20 struct nvkmd_dev; 21 struct nvkmd_mem; 22 struct vk_pipeline_cache; 23 24 struct nvk_slm_area { 25 simple_mtx_t mutex; 26 struct nvkmd_mem *mem; 27 uint32_t bytes_per_warp; 28 uint32_t bytes_per_tpc; 29 }; 30 31 struct nvkmd_mem * 32 nvk_slm_area_get_mem_ref(struct nvk_slm_area *area, 33 uint32_t *bytes_per_warp_out, 34 uint32_t *bytes_per_mp_out); 35 36 struct nvk_device { 37 struct vk_device vk; 38 39 struct nvkmd_dev *nvkmd; 40 41 struct nvk_upload_queue upload; 42 43 struct nvkmd_mem *zero_page; 44 struct nvk_descriptor_table images; 45 struct nvk_descriptor_table samplers; 46 struct nvk_edb_bview_cache edb_bview_cache; 47 struct nvk_heap shader_heap; 48 struct nvk_heap event_heap; 49 struct nvk_slm_area slm; 50 struct nvkmd_mem *vab_memory; 51 52 struct nvk_queue queue; 53 54 struct vk_meta_device meta; 55 56 struct nvk_shader *copy_queries; 57 }; 58 59 VK_DEFINE_HANDLE_CASTS(nvk_device, vk.base, VkDevice, VK_OBJECT_TYPE_DEVICE) 60 61 VkResult nvk_device_ensure_slm(struct nvk_device *dev, 62 uint32_t slm_bytes_per_lane, 63 uint32_t crs_bytes_per_warp); 64 65 static inline struct nvk_physical_device * nvk_device_physical(struct nvk_device * dev)66nvk_device_physical(struct nvk_device *dev) 67 { 68 return (struct nvk_physical_device *)dev->vk.physical; 69 } 70 71 VkResult nvk_device_init_meta(struct nvk_device *dev); 72 void nvk_device_finish_meta(struct nvk_device *dev); 73 74 #endif 75