Module: Mesa Branch: main Commit: 6aa06b1b9f7230b4124fdf34ee1f6e352bd216c4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6aa06b1b9f7230b4124fdf34ee1f6e352bd216c4
Author: Chia-I Wu <[email protected]> Date: Wed Sep 7 17:14:44 2022 -0700 turnip: add tu_physical_device::submitqueue_priority_count Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18510> --- src/freedreno/vulkan/tu_device.h | 3 +++ src/freedreno/vulkan/tu_drm.c | 17 +++++++++++++---- src/freedreno/vulkan/tu_kgsl.c | 2 ++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/freedreno/vulkan/tu_device.h b/src/freedreno/vulkan/tu_device.h index e8c846c82f3..018c1e2e4d8 100644 --- a/src/freedreno/vulkan/tu_device.h +++ b/src/freedreno/vulkan/tu_device.h @@ -122,6 +122,9 @@ struct tu_physical_device /* Address space and global fault count for this local_fd with DRM backend */ uint64_t fault_count; + /* with 0 being the highest priority */ + uint32_t submitqueue_priority_count; + struct tu_memory_heap heap; mtx_t vma_mutex; struct util_vma_heap vma; diff --git a/src/freedreno/vulkan/tu_drm.c b/src/freedreno/vulkan/tu_drm.c index 903b6e5dc97..f209ef4aabb 100644 --- a/src/freedreno/vulkan/tu_drm.c +++ b/src/freedreno/vulkan/tu_drm.c @@ -129,6 +129,16 @@ tu_drm_get_va_prop(const struct tu_physical_device *dev, return 0; } +static uint32_t +tu_drm_get_priorities(const struct tu_physical_device *dev) +{ + uint64_t val = 1; + tu_drm_get_param(dev, MSM_PARAM_PRIORITIES, &val); + assert(val >= 1); + + return val; +} + int tu_device_get_gpu_timestamp(struct tu_device *dev, uint64_t *ts) { @@ -164,12 +174,9 @@ tu_drm_submitqueue_new(const struct tu_device *dev, int priority, uint32_t *queue_id) { - uint64_t nr_rings = 1; - tu_drm_get_param(dev->physical_device, MSM_PARAM_NR_RINGS, &nr_rings); - struct drm_msm_submitqueue req = { .flags = 0, - .prio = MIN2(priority, MAX2(nr_rings, 1) - 1), + .prio = MIN2(priority, dev->physical_device->submitqueue_priority_count - 1), }; int ret = drmCommandWriteRead(dev->fd, @@ -878,6 +885,8 @@ tu_physical_device_try_create(struct vk_instance *vk_instance, goto fail; } + device->submitqueue_priority_count = tu_drm_get_priorities(device); + device->syncobj_type = vk_drm_syncobj_get_type(fd); /* we don't support DRM_CAP_SYNCOBJ_TIMELINE, but drm-shim does */ if (!(device->syncobj_type.features & VK_SYNC_FEATURE_TIMELINE)) diff --git a/src/freedreno/vulkan/tu_kgsl.c b/src/freedreno/vulkan/tu_kgsl.c index 5edcf18d6d3..11d548d7161 100644 --- a/src/freedreno/vulkan/tu_kgsl.c +++ b/src/freedreno/vulkan/tu_kgsl.c @@ -266,6 +266,8 @@ tu_enumerate_devices(struct vk_instance *vk_instance) device->gmem_size = env_var_as_unsigned("TU_GMEM", info.gmem_sizebytes); device->gmem_base = gmem_iova; + device->submitqueue_priority_count = 1; + device->heap.size = tu_get_system_heap_size(); device->heap.used = 0u; device->heap.flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;
