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;

Reply via email to