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