From db58d0f40b8792427d1f416ec96726fb22837115 Mon Sep 17 00:00:00 2001 From: Juston Li Date: Tue, 30 Apr 2024 14:53:47 -0700 Subject: [PATCH] venus: forward nice priority when creating ring Forward the nice priority to the renderer so that corresponding renderer threads are created with the same priority. For backwards compatibility, conditioned on VK_MESA_VENUS_PROTOCOL_SPEC_VERSION >= 2 Signed-off-by: Juston Li Part-of: --- src/virtio/vulkan/vn_ring.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/virtio/vulkan/vn_ring.c b/src/virtio/vulkan/vn_ring.c index a61aced81ed..9b5a293779b 100644 --- a/src/virtio/vulkan/vn_ring.c +++ b/src/virtio/vulkan/vn_ring.c @@ -5,6 +5,8 @@ #include "vn_ring.h" +#include + #include "venus-protocol/vn_protocol_driver_transport.h" #include "vn_cs.h" @@ -318,8 +320,22 @@ vn_ring_create(struct vn_instance *instance, mtx_init(&ring->roundtrip_mutex, mtx_plain); ring->roundtrip_next = 1; + /* VkRingPriorityInfoMESA support requires + * VK_MESA_VENUS_PROTOCOL_SPEC_VERSION >= 2 */ + int prio = 0; + bool ring_priority = false; + if (instance->renderer->info.vk_mesa_venus_protocol_spec_version >= 2) { + errno = 0; + prio = getpriority(PRIO_PROCESS, 0); + ring_priority = !(prio == -1 && errno); + } + const struct VkRingPriorityInfoMESA priority_info = { + .sType = VK_STRUCTURE_TYPE_RING_PRIORITY_INFO_MESA, + .priority = prio, + }; const struct VkRingMonitorInfoMESA monitor_info = { .sType = VK_STRUCTURE_TYPE_RING_MONITOR_INFO_MESA, + .pNext = ring_priority ? &priority_info : NULL, .maxReportingPeriodMicroseconds = VN_WATCHDOG_REPORT_PERIOD_US, }; const struct VkRingCreateInfoMESA info = {