diff options
author | 2016-04-21 11:46:23 -0700 | |
---|---|---|
committer | 2016-04-21 11:46:23 -0700 | |
commit | b0d4352ca610654f98c3c4ebc67ed9ad9c8c8493 (patch) | |
tree | 7b4587a89171aa7f651be0c9dbb1e271bd6ae6e4 /src | |
parent | fa7ff470a83183ba0d22a8b83a022e2e3122e851 (diff) |
Revise WSI setup.
- Set up present queue creation correctly.
- Move WSI functions to VulkanTestContext.
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1899213002
Review URL: https://codereview.chromium.org/1899213002
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/vk/GrVkBackendContext.cpp | 50 | ||||
-rw-r--r-- | src/gpu/vk/GrVkGpu.cpp | 2 | ||||
-rw-r--r-- | src/gpu/vk/GrVkInterface.cpp | 57 | ||||
-rw-r--r-- | src/gpu/vk/GrVkMemory.cpp | 1 |
4 files changed, 39 insertions, 71 deletions
diff --git a/src/gpu/vk/GrVkBackendContext.cpp b/src/gpu/vk/GrVkBackendContext.cpp index 30e7669268..3d3e9830f8 100644 --- a/src/gpu/vk/GrVkBackendContext.cpp +++ b/src/gpu/vk/GrVkBackendContext.cpp @@ -35,7 +35,8 @@ const char* kDebugLayerNames[] = { const uint32_t kGrVkMinimumVersion = VK_MAKE_VERSION(1, 0, 8); // Create the base Vulkan objects needed by the GrVkGpu object -const GrVkBackendContext* GrVkBackendContext::Create() { +const GrVkBackendContext* GrVkBackendContext::Create(uint32_t* presentQueueIndexPtr, + bool(*canPresent)(VkInstance, VkPhysicalDevice, uint32_t queueIndex)) { VkPhysicalDevice physDev; VkDevice device; VkInstance inst; @@ -141,7 +142,7 @@ const GrVkBackendContext* GrVkBackendContext::Create() { vkGetPhysicalDeviceQueueFamilyProperties(physDev, &queueCount, queueProps); // iterate to find the graphics queue - uint32_t graphicsQueueIndex = -1; + uint32_t graphicsQueueIndex = queueCount; for (uint32_t i = 0; i < queueCount; i++) { if (queueProps[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) { graphicsQueueIndex = i; @@ -150,6 +151,19 @@ const GrVkBackendContext* GrVkBackendContext::Create() { } SkASSERT(graphicsQueueIndex < queueCount); + // iterate to find the present queue, if needed + uint32_t presentQueueIndex = graphicsQueueIndex; + if (presentQueueIndexPtr && canPresent) { + for (uint32_t i = 0; i < queueCount; i++) { + if (canPresent(inst, physDev, i)) { + presentQueueIndex = i; + break; + } + } + SkASSERT(presentQueueIndex < queueCount); + *presentQueueIndexPtr = presentQueueIndex; + } + extensions.initDevice(kGrVkMinimumVersion, inst, physDev); SkTArray<const char*> deviceLayerNames; @@ -191,20 +205,32 @@ const GrVkBackendContext* GrVkBackendContext::Create() { float queuePriorities[1] = { 0.0 }; // Here we assume no need for swapchain queue // If one is needed, the client will need its own setup code - const VkDeviceQueueCreateInfo queueInfo = { - VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType - nullptr, // pNext - 0, // VkDeviceQueueCreateFlags - graphicsQueueIndex, // queueFamilyIndex - 1, // queueCount - queuePriorities, // pQueuePriorities + const VkDeviceQueueCreateInfo queueInfo[2] = { + { + VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType + nullptr, // pNext + 0, // VkDeviceQueueCreateFlags + graphicsQueueIndex, // queueFamilyIndex + 1, // queueCount + queuePriorities, // pQueuePriorities + }, + { + VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType + nullptr, // pNext + 0, // VkDeviceQueueCreateFlags + presentQueueIndex, // queueFamilyIndex + 1, // queueCount + queuePriorities, // pQueuePriorities + } }; + uint32_t queueInfoCount = (presentQueueIndex != graphicsQueueIndex) ? 2 : 1; + const VkDeviceCreateInfo deviceInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // sType nullptr, // pNext 0, // VkDeviceCreateFlags - 1, // queueCreateInfoCount - &queueInfo, // pQueueCreateInfos + queueInfoCount, // queueCreateInfoCount + queueInfo, // pQueueCreateInfos (uint32_t) deviceLayerNames.count(), // layerCount deviceLayerNames.begin(), // ppEnabledLayerNames (uint32_t) deviceExtensionNames.count(), // extensionCount @@ -227,7 +253,7 @@ const GrVkBackendContext* GrVkBackendContext::Create() { ctx->fPhysicalDevice = physDev; ctx->fDevice = device; ctx->fQueue = queue; - ctx->fQueueFamilyIndex = graphicsQueueIndex; + ctx->fGraphicsQueueIndex = graphicsQueueIndex; ctx->fMinAPIVersion = kGrVkMinimumVersion; ctx->fExtensions = extensionFlags; ctx->fFeatures = featureFlags; diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index 040912e73a..eebb589886 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -120,7 +120,7 @@ GrVkGpu::GrVkGpu(GrContext* context, const GrContextOptions& options, VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, // sType nullptr, // pNext VK_COMMAND_POOL_CREATE_TRANSIENT_BIT, // CmdPoolCreateFlags - backendCtx->fQueueFamilyIndex, // queueFamilyIndex + backendCtx->fGraphicsQueueIndex, // queueFamilyIndex }; GR_VK_CALL_ERRCHECK(this->vkInterface(), CreateCommandPool(fDevice, &cmdPoolInfo, nullptr, &fCmdPool)); diff --git a/src/gpu/vk/GrVkInterface.cpp b/src/gpu/vk/GrVkInterface.cpp index 37e3570e48..17b254eb6a 100644 --- a/src/gpu/vk/GrVkInterface.cpp +++ b/src/gpu/vk/GrVkInterface.cpp @@ -157,45 +157,6 @@ const GrVkInterface* GrVkCreateInterface(VkInstance instance, VkDevice device, GET_DEV_PROC(CmdNextSubpass); GET_DEV_PROC(CmdEndRenderPass); GET_DEV_PROC(CmdExecuteCommands); - if (extensionFlags & kKHR_surface_GrVkExtensionFlag) { - GET_PROC(DestroySurfaceKHR); - GET_PROC(GetPhysicalDeviceSurfaceSupportKHR); - GET_PROC(GetPhysicalDeviceSurfaceCapabilitiesKHR); - GET_PROC(GetPhysicalDeviceSurfaceFormatsKHR); - GET_PROC(GetPhysicalDeviceSurfacePresentModesKHR); - } - if (extensionFlags & kKHR_surface_GrVkExtensionFlag) { - GET_DEV_PROC(CreateSwapchainKHR); - GET_DEV_PROC(DestroySwapchainKHR); - GET_DEV_PROC(GetSwapchainImagesKHR); - GET_DEV_PROC(AcquireNextImageKHR); - GET_DEV_PROC(QueuePresentKHR); - } -#if defined(VK_USE_PLATFORM_WIN32_KHR) - if (extensionFlags & kKHR_win32_surface_GrVkExtensionFlag) { - GET_PROC(CreateWin32SurfaceKHR); - GET_PROC(GetPhysicalDeviceWin32PresentationSupportKHR); - } -#elif defined(VK_USE_PLATFORM_ANDROID_KHR) - if (extensionFlags & kKHR_android_surface_GrVkExtensionFlag) { - GET_PROC(CreateAndroidSurfaceKHR); - } -#elif defined(VK_USE_PLATFORM_XLIB_KHR) - if (extensionFlags & kKHR_xlib_surface_GrVkExtensionFlag) { - GET_PROC(CreateXlibSurfaceKHR); - GET_PROC(GetPhysicalDeviceXlibPresentationSupportKHR); - } -#endif - - // We probably don't care about these, they're for consoles - //GET_PROC(GetPhysicalDeviceDisplayPropertiesKHR); - //GET_PROC(GetPhysicalDeviceDisplayPlanePropertiesKHR); - //GET_PROC(GetDisplayPlaneSupportedDisplaysKHR); - //GET_PROC(GetDisplayModePropertiesKHR); - //GET_PROC(CreateDisplayModeKHR); - //GET_PROC(GetDisplayPlaneCapabilitiesKHR); - //GET_PROC(CreateDisplayPlaneSurfaceKHR); - //GET_DEV_PROC(CreateSharedSwapchainsKHR); if (extensionFlags & kEXT_debug_report_GrVkExtensionFlag) { GET_PROC(CreateDebugReportCallbackEXT); @@ -347,24 +308,6 @@ bool GrVkInterface::validate() const { NULL == fFunctions.fCmdNextSubpass || NULL == fFunctions.fCmdEndRenderPass || NULL == fFunctions.fCmdExecuteCommands || - NULL == fFunctions.fDestroySurfaceKHR || - NULL == fFunctions.fGetPhysicalDeviceSurfaceSupportKHR || - NULL == fFunctions.fGetPhysicalDeviceSurfaceCapabilitiesKHR || - NULL == fFunctions.fGetPhysicalDeviceSurfaceFormatsKHR || - NULL == fFunctions.fGetPhysicalDeviceSurfacePresentModesKHR || - NULL == fFunctions.fCreateSwapchainKHR || - NULL == fFunctions.fDestroySwapchainKHR || - NULL == fFunctions.fGetSwapchainImagesKHR || - NULL == fFunctions.fAcquireNextImageKHR || - NULL == fFunctions.fQueuePresentKHR || - //NULL == fFunctions.fGetPhysicalDeviceDisplayPropertiesKHR || - //NULL == fFunctions.fGetPhysicalDeviceDisplayPlanePropertiesKHR || - //NULL == fFunctions.fGetDisplayPlaneSupportedDisplaysKHR || - //NULL == fFunctions.fGetDisplayModePropertiesKHR || - //NULL == fFunctions.fCreateDisplayModeKHR || - //NULL == fFunctions.fGetDisplayPlaneCapabilitiesKHR || - //NULL == fFunctions.fCreateDisplayPlaneSurfaceKHR || - //NULL == fFunctions.fCreateSharedSwapchainsKHR || NULL == fFunctions.fCreateDebugReportCallbackEXT || NULL == fFunctions.fDebugReportMessageEXT || NULL == fFunctions.fDestroyDebugReportCallbackEXT) { diff --git a/src/gpu/vk/GrVkMemory.cpp b/src/gpu/vk/GrVkMemory.cpp index 30a38066c2..c9663ed150 100644 --- a/src/gpu/vk/GrVkMemory.cpp +++ b/src/gpu/vk/GrVkMemory.cpp @@ -68,7 +68,6 @@ bool GrVkMemory::AllocAndBindBufferMemory(const GrVkGpu* gpu, VkMemoryRequirements memReqs; GR_VK_CALL(iface, GetBufferMemoryRequirements(device, buffer, &memReqs)); - if (!alloc_device_memory(gpu, &memReqs, flags, memory)) { return false; } |