| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2015 Google Inc. | 3 * Copyright 2015 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "GrContext.h" | 9 #include "GrContext.h" |
| 10 #include "SkSurface.h" | 10 #include "SkSurface.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 GET_DEV_PROC(QueuePresentKHR); | 56 GET_DEV_PROC(QueuePresentKHR); |
| 57 | 57 |
| 58 fContext = GrContext::Create(kVulkan_GrBackend, (GrBackendContext)fBackendCo
ntext.get()); | 58 fContext = GrContext::Create(kVulkan_GrBackend, (GrBackendContext)fBackendCo
ntext.get()); |
| 59 | 59 |
| 60 fSurface = createVkSurface(instance, platformData); | 60 fSurface = createVkSurface(instance, platformData); |
| 61 if (VK_NULL_HANDLE == fSurface) { | 61 if (VK_NULL_HANDLE == fSurface) { |
| 62 fBackendContext.reset(nullptr); | 62 fBackendContext.reset(nullptr); |
| 63 return; | 63 return; |
| 64 } | 64 } |
| 65 | 65 |
| 66 // query to get the initial queue props size | |
| 67 uint32_t queueCount; | |
| 68 GR_VK_CALL(fBackendContext->fInterface, | |
| 69 GetPhysicalDeviceQueueFamilyProperties(fBackendContext->fPhysical
Device, &queueCount, | |
| 70 nullptr)); | |
| 71 SkASSERT(queueCount >= 1); | |
| 72 | |
| 73 SkAutoMalloc queuePropsAlloc(queueCount * sizeof(VkQueueFamilyProperties)); | |
| 74 // now get the actual queue props | |
| 75 VkQueueFamilyProperties* queueProps = (VkQueueFamilyProperties*)queuePropsAl
loc.get(); | |
| 76 | |
| 77 GR_VK_CALL(fBackendContext->fInterface, | |
| 78 GetPhysicalDeviceQueueFamilyProperties(fBackendContext->fPhysical
Device, &queueCount, | |
| 79 queueProps)); | |
| 80 | |
| 81 VkBool32 supported; | 66 VkBool32 supported; |
| 82 VkResult res = fGetPhysicalDeviceSurfaceSupportKHR(fBackendContext->fPhysica
lDevice, | 67 VkResult res = fGetPhysicalDeviceSurfaceSupportKHR(fBackendContext->fPhysica
lDevice, |
| 83 fPresentQueueIndex, fSurf
ace, | 68 fPresentQueueIndex, fSurf
ace, |
| 84 &supported); | 69 &supported); |
| 85 if (VK_SUCCESS != res) { | 70 if (VK_SUCCESS != res) { |
| 86 this->destroyContext(); | 71 this->destroyContext(); |
| 87 return; | 72 return; |
| 88 } | 73 } |
| 89 | 74 |
| 90 if (!this->createSwapchain(-1, -1)) { | 75 if (!this->createSwapchain(-1, -1)) { |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 VK_IMAGE_USAGE_TRANSFER_DST_BIT; | 154 VK_IMAGE_USAGE_TRANSFER_DST_BIT; |
| 170 SkASSERT((caps.supportedUsageFlags & usageFlags) == usageFlags); | 155 SkASSERT((caps.supportedUsageFlags & usageFlags) == usageFlags); |
| 171 SkASSERT(caps.supportedTransforms & caps.currentTransform); | 156 SkASSERT(caps.supportedTransforms & caps.currentTransform); |
| 172 SkASSERT(caps.supportedCompositeAlpha & (VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR | | 157 SkASSERT(caps.supportedCompositeAlpha & (VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR | |
| 173 VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR)
); | 158 VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR)
); |
| 174 VkCompositeAlphaFlagBitsKHR composite_alpha = | 159 VkCompositeAlphaFlagBitsKHR composite_alpha = |
| 175 (caps.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR) ? | 160 (caps.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR) ? |
| 176 VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR : | 161 VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR : |
| 177 VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; | 162 VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; |
| 178 | 163 |
| 164 // Pick our surface format -- for now, the first one |
| 165 VkFormat surfaceFormat = surfaceFormats[0].format; |
| 166 VkColorSpaceKHR colorSpace = surfaceFormats[0].colorSpace; |
| 167 |
| 179 // If mailbox mode is available, use it, as it is the lowest-latency non- | 168 // If mailbox mode is available, use it, as it is the lowest-latency non- |
| 180 // tearing mode. If not, fall back to FIFO which is always available. | 169 // tearing mode. If not, fall back to FIFO which is always available. |
| 181 VkPresentModeKHR mode = VK_PRESENT_MODE_FIFO_KHR; | 170 VkPresentModeKHR mode = VK_PRESENT_MODE_FIFO_KHR; |
| 182 for (uint32_t i = 0; i < presentModeCount; ++i) { | 171 for (uint32_t i = 0; i < presentModeCount; ++i) { |
| 183 // use mailbox | 172 // use mailbox |
| 184 if (VK_PRESENT_MODE_MAILBOX_KHR == presentModes[i]) { | 173 if (VK_PRESENT_MODE_MAILBOX_KHR == presentModes[i]) { |
| 185 mode = presentModes[i]; | 174 mode = presentModes[i]; |
| 186 break; | 175 break; |
| 187 } | 176 } |
| 188 } | 177 } |
| 189 | 178 |
| 190 VkSwapchainCreateInfoKHR swapchainCreateInfo; | 179 VkSwapchainCreateInfoKHR swapchainCreateInfo; |
| 191 memset(&swapchainCreateInfo, 0, sizeof(VkSwapchainCreateInfoKHR)); | 180 memset(&swapchainCreateInfo, 0, sizeof(VkSwapchainCreateInfoKHR)); |
| 192 swapchainCreateInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; | 181 swapchainCreateInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; |
| 193 swapchainCreateInfo.surface = fSurface; | 182 swapchainCreateInfo.surface = fSurface; |
| 194 swapchainCreateInfo.minImageCount = imageCount; | 183 swapchainCreateInfo.minImageCount = imageCount; |
| 195 swapchainCreateInfo.imageFormat = surfaceFormats[0].format; // for now
, use the first one | 184 swapchainCreateInfo.imageFormat = surfaceFormat; |
| 196 swapchainCreateInfo.imageColorSpace = surfaceFormats[0].colorSpace; | 185 swapchainCreateInfo.imageColorSpace = colorSpace; |
| 197 swapchainCreateInfo.imageExtent = extent; | 186 swapchainCreateInfo.imageExtent = extent; |
| 198 swapchainCreateInfo.imageArrayLayers = 1; | 187 swapchainCreateInfo.imageArrayLayers = 1; |
| 199 swapchainCreateInfo.imageUsage = usageFlags; | 188 swapchainCreateInfo.imageUsage = usageFlags; |
| 200 | 189 |
| 201 uint32_t queueFamilies[] = { fBackendContext->fGraphicsQueueIndex, fPresentQ
ueueIndex }; | 190 uint32_t queueFamilies[] = { fBackendContext->fGraphicsQueueIndex, fPresentQ
ueueIndex }; |
| 202 if (fBackendContext->fGraphicsQueueIndex != fPresentQueueIndex) { | 191 if (fBackendContext->fGraphicsQueueIndex != fPresentQueueIndex) { |
| 203 swapchainCreateInfo.imageSharingMode = VK_SHARING_MODE_CONCURRENT; | 192 swapchainCreateInfo.imageSharingMode = VK_SHARING_MODE_CONCURRENT; |
| 204 swapchainCreateInfo.queueFamilyIndexCount = 2; | 193 swapchainCreateInfo.queueFamilyIndexCount = 2; |
| 205 swapchainCreateInfo.pQueueFamilyIndices = queueFamilies; | 194 swapchainCreateInfo.pQueueFamilyIndices = queueFamilies; |
| 206 } else { | 195 } else { |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 &backbuffer->fRenderSemaphore, // pWaitSemaphores | 559 &backbuffer->fRenderSemaphore, // pWaitSemaphores |
| 571 1, // swapchainCount | 560 1, // swapchainCount |
| 572 &fSwapchain, // pSwapchains | 561 &fSwapchain, // pSwapchains |
| 573 &backbuffer->fImageIndex, // pImageIndices | 562 &backbuffer->fImageIndex, // pImageIndices |
| 574 NULL // pResults | 563 NULL // pResults |
| 575 }; | 564 }; |
| 576 | 565 |
| 577 fQueuePresentKHR(fPresentQueue, &presentInfo); | 566 fQueuePresentKHR(fPresentQueue, &presentInfo); |
| 578 | 567 |
| 579 } | 568 } |
| OLD | NEW |