blob: c28a42b2c9904f40da19a988e3e9ff8d58adc641 [file] [log] [blame]
Greg Daniel35970ec2017-11-10 10:03:05 -05001/*
2 * Copyright 2017 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "VkTestUtils.h"
9
10#ifdef SK_VULKAN
11
12#include "../ports/SkOSLibrary.h"
13
14namespace sk_gpu_test {
15
16bool LoadVkLibraryAndGetProcAddrFuncs(PFN_vkGetInstanceProcAddr* instProc,
17 PFN_vkGetDeviceProcAddr* devProc) {
Chris Dalton3a67b8e2018-05-03 09:30:29 -060018#ifdef SK_MOLTENVK
19 // MoltenVK is a statically linked framework, so there is no Vulkan library to load.
20 *instProc = &vkGetInstanceProcAddr;
21 *devProc = &vkGetDeviceProcAddr;
22 return true;
23#else
Greg Daniel35970ec2017-11-10 10:03:05 -050024 static void* vkLib = nullptr;
25 static PFN_vkGetInstanceProcAddr localInstProc = nullptr;
26 static PFN_vkGetDeviceProcAddr localDevProc = nullptr;
27 if (!vkLib) {
28#if defined _WIN32
29 vkLib = DynamicLoadLibrary("vulkan-1.dll");
30#else
31 vkLib = DynamicLoadLibrary("libvulkan.so");
32#endif
33 if (!vkLib) {
34 return false;
35 }
36 localInstProc = (PFN_vkGetInstanceProcAddr) GetProcedureAddress(vkLib,
37 "vkGetInstanceProcAddr");
38 localDevProc = (PFN_vkGetDeviceProcAddr) GetProcedureAddress(vkLib,
39 "vkGetDeviceProcAddr");
40 }
41 if (!localInstProc || !localDevProc) {
42 return false;
43 }
44 *instProc = localInstProc;
45 *devProc = localDevProc;
46 return true;
Chris Dalton3a67b8e2018-05-03 09:30:29 -060047#endif
Greg Daniel35970ec2017-11-10 10:03:05 -050048}
Greg Daniel35970ec2017-11-10 10:03:05 -050049}
50
51#endif