aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar jvanverth <jvanverth@google.com>2016-04-21 11:46:23 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-04-21 11:46:23 -0700
commitb0d4352ca610654f98c3c4ebc67ed9ad9c8c8493 (patch)
tree7b4587a89171aa7f651be0c9dbb1e271bd6ae6e4 /src
parentfa7ff470a83183ba0d22a8b83a022e2e3122e851 (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.cpp50
-rw-r--r--src/gpu/vk/GrVkGpu.cpp2
-rw-r--r--src/gpu/vk/GrVkInterface.cpp57
-rw-r--r--src/gpu/vk/GrVkMemory.cpp1
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;
}