diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index 76fece042a3..a366ca1c8e6 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -369,11 +369,21 @@ panvk_fill_global_priority(const struct panvk_physical_device *physical_device, uint32_t family_idx, VkQueueFamilyGlobalPriorityPropertiesKHR *prio) { + const unsigned arch = pan_arch(physical_device->kmod.props.gpu_id); uint32_t prio_idx = 0; + switch (family_idx) { case PANVK_QUEUE_FAMILY_GPU: { enum pan_kmod_group_allow_priority_flags prio_mask = physical_device->kmod.props.allowed_group_priorities_mask; + + /* Non-medium priority context is not hooked-up in the JM backend, even + * though the panfrost kmod advertize it. Manually filter non-medium + * priority for now. + */ + if (arch < 10) + prio_mask &= PAN_KMOD_GROUP_ALLOW_PRIORITY_MEDIUM; + if (prio_mask & PAN_KMOD_GROUP_ALLOW_PRIORITY_LOW) prio->priorities[prio_idx++] = VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR; if (prio_mask & PAN_KMOD_GROUP_ALLOW_PRIORITY_MEDIUM) diff --git a/src/panfrost/vulkan/panvk_vX_device.c b/src/panfrost/vulkan/panvk_vX_device.c index feaa5f49334..c2a84424818 100644 --- a/src/panfrost/vulkan/panvk_vX_device.c +++ b/src/panfrost/vulkan/panvk_vX_device.c @@ -205,6 +205,7 @@ static VkResult check_global_priority(const struct panvk_physical_device *phys_dev, const VkDeviceQueueCreateInfo *create_info) { + const unsigned arch = pan_arch(phys_dev->kmod.props.gpu_id); const VkDeviceQueueGlobalPriorityCreateInfoKHR *priority_info = vk_find_struct_const(create_info->pNext, DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR); @@ -219,6 +220,13 @@ check_global_priority(const struct panvk_physical_device *phys_dev, enum pan_kmod_group_allow_priority_flags allowed_prio_mask = phys_dev->kmod.props.allowed_group_priorities_mask; + /* Non-medium priority context is not hooked-up in the JM backend, even + * though the panfrost kmod advertize it. Manually filter non-medium + * priority for now. + */ + if (arch < 10) + allowed_prio_mask &= PAN_KMOD_GROUP_ALLOW_PRIORITY_MEDIUM; + if (requested_prio & allowed_prio_mask) return VK_SUCCESS;