summaryrefslogtreecommitdiff
path: root/libs/hwui/renderthread/VulkanManager.cpp
diff options
context:
space:
mode:
authorStan Iliev <stani@google.com>2019-02-28 13:16:36 -0500
committerStan Iliev <stani@google.com>2019-02-28 13:16:36 -0500
commit7e733366fcb93b0ac242f43fc2e06d862b51e7bb (patch)
tree2740fec2537b20af0dbe30aa0ac9a14b0cd4e9dc /libs/hwui/renderthread/VulkanManager.cpp
parent8e95f0bfb9294da0bdbe57f12c616e593aafa5c3 (diff)
Add ability to change context priority of RT Vulkan queues
Test: Pixel 3 does not support VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME Bug: 126595186 Change-Id: I4b2e9c6d5f92665fd2274d0aabf4b012a7a29f46
Diffstat (limited to 'libs/hwui/renderthread/VulkanManager.cpp')
-rw-r--r--libs/hwui/renderthread/VulkanManager.cpp30
1 files changed, 28 insertions, 2 deletions
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index 3b43f1297597..5af660c8738a 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -254,10 +254,36 @@ void VulkanManager::setupDevice(GrVkExtensions& grExtensions, VkPhysicalDeviceFe
float queuePriorities[1] = { 0.0 };
+ void* queueNextPtr = nullptr;
+
+ VkDeviceQueueGlobalPriorityCreateInfoEXT queuePriorityCreateInfo;
+
+ if (Properties::contextPriority != 0
+ && grExtensions.hasExtension(VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME, 2)) {
+ memset(&queuePriorityCreateInfo, 0, sizeof(VkDeviceQueueGlobalPriorityCreateInfoEXT));
+ queuePriorityCreateInfo.sType =
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT;
+ queuePriorityCreateInfo.pNext = nullptr;
+ switch (Properties::contextPriority) {
+ case EGL_CONTEXT_PRIORITY_LOW_IMG:
+ queuePriorityCreateInfo.globalPriority = VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT;
+ break;
+ case EGL_CONTEXT_PRIORITY_MEDIUM_IMG:
+ queuePriorityCreateInfo.globalPriority = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT;
+ break;
+ case EGL_CONTEXT_PRIORITY_HIGH_IMG:
+ queuePriorityCreateInfo.globalPriority = VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT;
+ break;
+ default:
+ LOG_ALWAYS_FATAL("Unsupported context priority");
+ }
+ queueNextPtr = &queuePriorityCreateInfo;
+ }
+
const VkDeviceQueueCreateInfo queueInfo[2] = {
{
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType
- nullptr, // pNext
+ queueNextPtr, // pNext
0, // VkDeviceQueueCreateFlags
mGraphicsQueueIndex, // queueFamilyIndex
1, // queueCount
@@ -265,7 +291,7 @@ void VulkanManager::setupDevice(GrVkExtensions& grExtensions, VkPhysicalDeviceFe
},
{
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType
- nullptr, // pNext
+ queueNextPtr, // pNext
0, // VkDeviceQueueCreateFlags
mPresentQueueIndex, // queueFamilyIndex
1, // queueCount