OLD | NEW |
(Empty) | |
| 1 |
| 2 /* |
| 3 * Copyright 2016 Google Inc. |
| 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. |
| 7 */ |
| 8 |
| 9 #include "../VulkanWindowContext.h" |
| 10 #include "Window_unix.h" |
| 11 |
| 12 #include "vk/GrVkInterface.h" |
| 13 #include "vk/GrVkUtil.h" |
| 14 |
| 15 #include <X11/Xlib-xcb.h> |
| 16 |
| 17 namespace sk_app { |
| 18 |
| 19 // Platform dependant call |
| 20 VkSurfaceKHR VulkanWindowContext::createVkSurface(VkInstance instance, void* pla
tformData) { |
| 21 static PFN_vkCreateXcbSurfaceKHR createXcbSurfaceKHR = nullptr; |
| 22 if (!createXcbSurfaceKHR) { |
| 23 createXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR) vkGetInstanceProcAddr(
instance, |
| 24 "vkCreat
eXcbSurfaceKHR"); |
| 25 } |
| 26 |
| 27 if (!platformData) { |
| 28 return VK_NULL_HANDLE; |
| 29 } |
| 30 ContextPlatformData_unix* unixPlatformData = |
| 31 reinterpret_cast<ContextPlatformData_u
nix*>(platformData); |
| 32 |
| 33 |
| 34 VkSurfaceKHR surface; |
| 35 |
| 36 VkXcbSurfaceCreateInfoKHR surfaceCreateInfo; |
| 37 memset(&surfaceCreateInfo, 0, sizeof(VkXcbSurfaceCreateInfoKHR)); |
| 38 surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; |
| 39 surfaceCreateInfo.pNext = nullptr; |
| 40 surfaceCreateInfo.flags = 0; |
| 41 surfaceCreateInfo.connection = XGetXCBConnection(unixPlatformData->fDisplay)
; |
| 42 surfaceCreateInfo.window = unixPlatformData->fHWnd; |
| 43 |
| 44 VkResult res = createXcbSurfaceKHR(instance, &surfaceCreateInfo, nullptr, &s
urface); |
| 45 if (VK_SUCCESS != res) { |
| 46 return VK_NULL_HANDLE; |
| 47 } |
| 48 |
| 49 return surface; |
| 50 } |
| 51 |
| 52 // Platform dependant call |
| 53 bool VulkanWindowContext::canPresent(VkInstance instance, VkPhysicalDevice physD
ev, |
| 54 uint32_t queueFamilyIndex, void* platformDa
ta) { |
| 55 static PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR |
| 56 getPhysicalDeviceXcbPresentationSupp
ortKHR = nullptr; |
| 57 if (!getPhysicalDeviceXcbPresentationSupportKHR) { |
| 58 getPhysicalDeviceXcbPresentationSupportKHR = |
| 59 (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR) vkGetInstanceProc
Addr(instance, |
| 60 "vkGetPhysicalDeviceXcbPresenta
tionSupportKHR"); |
| 61 } |
| 62 |
| 63 ContextPlatformData_unix* unixPlatformData = |
| 64 reinterpret_cast<ContextPlatformData_u
nix*>(platformData); |
| 65 |
| 66 Display* display = unixPlatformData->fDisplay; |
| 67 VkBool32 check = getPhysicalDeviceXcbPresentationSupportKHR(physDev, |
| 68 queueFamilyIndex
, |
| 69 XGetXCBConnectio
n(display), |
| 70 unixPlatformData
->fVisualID); |
| 71 return (VK_FALSE != check); |
| 72 } |
| 73 |
| 74 } // namespace sk_app |
OLD | NEW |