19 {
21 if (!sk_gpu_test::LoadVkLibraryAndGetProcAddrFuncs(&instProc)) {
22 SkDebugf(
"Could not load vulkan library\n");
23 return nullptr;
24 }
25
26 auto createVkSurface = [&
info, instProc](VkInstance
instance) -> VkSurfaceKHR {
28 if (!createXcbSurfaceKHR) {
29 createXcbSurfaceKHR =
31 }
32
34
38 surfaceCreateInfo.
pNext =
nullptr;
39 surfaceCreateInfo.
flags = 0;
42
46 }
47
49 };
50
51 auto canPresent = [&
info, instProc](VkInstance
instance, VkPhysicalDevice physDev,
52 uint32_t queueFamilyIndex) {
54 getPhysicalDeviceXcbPresentationSupportKHR = nullptr;
55 if (!getPhysicalDeviceXcbPresentationSupportKHR) {
56 getPhysicalDeviceXcbPresentationSupportKHR =
58 instProc(
instance,
"vkGetPhysicalDeviceXcbPresentationSupportKHR");
59 }
60
61 Display* display =
info.fDisplay;
62 VisualID visualID = XVisualIDFromVisual(DefaultVisual(
info.fDisplay,
63 DefaultScreen(
info.fDisplay)));
64 VkBool32 check = getPhysicalDeviceXcbPresentationSupportKHR(physDev,
65 queueFamilyIndex,
66 XGetXCBConnection(display),
67 visualID);
69 };
70 std::unique_ptr<WindowContext> ctx(
71 new internal::GraphiteVulkanWindowContext(displayParams,
72 createVkSurface,
73 canPresent,
74 instProc));
75 if (!ctx->isValid()) {
76 return nullptr;
77 }
78 return ctx;
79}
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
VkXcbSurfaceCreateFlagsKHR flags
xcb_connection_t * connection
@ VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR
VkResult(VKAPI_PTR * PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
VkBool32(VKAPI_PTR * PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t *connection, xcb_visualid_t visual_id)