Loading libs/renderengine/skia/SkiaVkRenderEngine.cpp +26 −7 Original line number Diff line number Diff line Loading @@ -263,7 +263,7 @@ VulkanInterface initVulkanInterface(bool protectedContent = false) { VK_GET_INST_PROC(instance, EnumerateDeviceExtensionProperties); VK_GET_INST_PROC(instance, GetPhysicalDeviceProperties2); VK_GET_INST_PROC(instance, GetPhysicalDeviceExternalSemaphoreProperties); VK_GET_INST_PROC(instance, GetPhysicalDeviceQueueFamilyProperties); VK_GET_INST_PROC(instance, GetPhysicalDeviceQueueFamilyProperties2); VK_GET_INST_PROC(instance, GetPhysicalDeviceFeatures2); VK_GET_INST_PROC(instance, CreateDevice); Loading Loading @@ -342,17 +342,37 @@ VulkanInterface initVulkanInterface(bool protectedContent = false) { } uint32_t queueCount; vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueCount, nullptr); vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueCount, nullptr); if (queueCount == 0) { BAIL("Could not find queues for physical device"); } std::vector<VkQueueFamilyProperties> queueProps(queueCount); vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueCount, queueProps.data()); std::vector<VkQueueFamilyProperties2> queueProps(queueCount); std::vector<VkQueueFamilyGlobalPriorityPropertiesEXT> queuePriorityProps(queueCount); VkQueueGlobalPriorityKHR queuePriority = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR; // Even though we don't yet know if the VK_EXT_global_priority extension is available, // we can safely add the request to the pNext chain, and if the extension is not // available, it will be ignored. for (uint32_t i = 0; i < queueCount; ++i) { queuePriorityProps[i].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT; queuePriorityProps[i].pNext = nullptr; queueProps[i].pNext = &queuePriorityProps[i]; } vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueCount, queueProps.data()); int graphicsQueueIndex = -1; for (uint32_t i = 0; i < queueCount; ++i) { if (queueProps[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) { // Look at potential answers to the VK_EXT_global_priority query. If answers were // provided, we may adjust the queuePriority. if (queueProps[i].queueFamilyProperties.queueFlags & VK_QUEUE_GRAPHICS_BIT) { for (uint32_t j = 0; j < queuePriorityProps[i].priorityCount; j++) { if (queuePriorityProps[i].priorities[j] > queuePriority) { queuePriority = queuePriorityProps[i].priorities[j]; } } if (queuePriority == VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR) { interface.isRealtimePriority = true; } graphicsQueueIndex = i; break; } Loading Loading @@ -419,12 +439,11 @@ VulkanInterface initVulkanInterface(bool protectedContent = false) { VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT, nullptr, // If queue priority is supported, RE should always have realtime priority. VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT, queuePriority, }; if (interface.grExtensions.hasExtension(VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME, 2)) { queueNextPtr = &queuePriorityCreateInfo; interface.isRealtimePriority = true; } VkDeviceQueueCreateFlags deviceQueueCreateFlags = Loading Loading
libs/renderengine/skia/SkiaVkRenderEngine.cpp +26 −7 Original line number Diff line number Diff line Loading @@ -263,7 +263,7 @@ VulkanInterface initVulkanInterface(bool protectedContent = false) { VK_GET_INST_PROC(instance, EnumerateDeviceExtensionProperties); VK_GET_INST_PROC(instance, GetPhysicalDeviceProperties2); VK_GET_INST_PROC(instance, GetPhysicalDeviceExternalSemaphoreProperties); VK_GET_INST_PROC(instance, GetPhysicalDeviceQueueFamilyProperties); VK_GET_INST_PROC(instance, GetPhysicalDeviceQueueFamilyProperties2); VK_GET_INST_PROC(instance, GetPhysicalDeviceFeatures2); VK_GET_INST_PROC(instance, CreateDevice); Loading Loading @@ -342,17 +342,37 @@ VulkanInterface initVulkanInterface(bool protectedContent = false) { } uint32_t queueCount; vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueCount, nullptr); vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueCount, nullptr); if (queueCount == 0) { BAIL("Could not find queues for physical device"); } std::vector<VkQueueFamilyProperties> queueProps(queueCount); vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueCount, queueProps.data()); std::vector<VkQueueFamilyProperties2> queueProps(queueCount); std::vector<VkQueueFamilyGlobalPriorityPropertiesEXT> queuePriorityProps(queueCount); VkQueueGlobalPriorityKHR queuePriority = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR; // Even though we don't yet know if the VK_EXT_global_priority extension is available, // we can safely add the request to the pNext chain, and if the extension is not // available, it will be ignored. for (uint32_t i = 0; i < queueCount; ++i) { queuePriorityProps[i].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT; queuePriorityProps[i].pNext = nullptr; queueProps[i].pNext = &queuePriorityProps[i]; } vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueCount, queueProps.data()); int graphicsQueueIndex = -1; for (uint32_t i = 0; i < queueCount; ++i) { if (queueProps[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) { // Look at potential answers to the VK_EXT_global_priority query. If answers were // provided, we may adjust the queuePriority. if (queueProps[i].queueFamilyProperties.queueFlags & VK_QUEUE_GRAPHICS_BIT) { for (uint32_t j = 0; j < queuePriorityProps[i].priorityCount; j++) { if (queuePriorityProps[i].priorities[j] > queuePriority) { queuePriority = queuePriorityProps[i].priorities[j]; } } if (queuePriority == VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR) { interface.isRealtimePriority = true; } graphicsQueueIndex = i; break; } Loading Loading @@ -419,12 +439,11 @@ VulkanInterface initVulkanInterface(bool protectedContent = false) { VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT, nullptr, // If queue priority is supported, RE should always have realtime priority. VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT, queuePriority, }; if (interface.grExtensions.hasExtension(VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME, 2)) { queueNextPtr = &queuePriorityCreateInfo; interface.isRealtimePriority = true; } VkDeviceQueueCreateFlags deviceQueueCreateFlags = Loading