aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--BUILD.gn44
-rw-r--r--tools/gpu/vk/VkTestUtils.cpp7
2 files changed, 46 insertions, 5 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 6548b842ae..aee0fd1a1e 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -44,6 +44,7 @@ declare_args() {
skia_enable_vulkan_debug_layers = is_skia_dev_build && is_debug
skia_vulkan_header = ""
skia_vulkan_sdk = getenv("VULKAN_SDK")
+ skia_moltenvk_path = ""
skia_qt_path = getenv("QT_PATH")
skia_compile_processors = false
skia_generate_workarounds = false
@@ -69,7 +70,7 @@ declare_args() {
} else if (is_fuchsia) {
skia_use_vulkan = fuchsia_use_vulkan
} else {
- skia_use_vulkan = skia_vulkan_sdk != ""
+ skia_use_vulkan = skia_vulkan_sdk != "" || skia_moltenvk_path != ""
}
if (is_ios) {
@@ -223,6 +224,32 @@ config("skia_library") {
defines = [ "SKIA_IMPLEMENTATION=1" ]
}
+config("moltenvk") {
+ if (is_ios) {
+ moltenvk_framework_path = "$skia_moltenvk_path/MoltenVK/iOS"
+ } else {
+ moltenvk_framework_path = "$skia_moltenvk_path/MoltenVK/macOS"
+ }
+ cflags = [
+ "-F$moltenvk_framework_path",
+ "-isystem$skia_moltenvk_path/MoltenVK/include", # for <vulkan/vulkan.h>
+ ]
+ ldflags = [ "-F$moltenvk_framework_path" ]
+ libs = [
+ "MoltenVK.framework",
+ "Metal.framework",
+ "IOSurface.framework",
+ "QuartzCore.framework",
+ "Foundation.framework",
+ ]
+ if (is_ios) {
+ libs += [ "UIKit.framework" ]
+ } else {
+ libs += [ "IOKit.framework" ]
+ }
+ defines = [ "SK_MOLTENVK" ]
+}
+
skia_library_configs = [
":skia_public",
":skia_private",
@@ -350,6 +377,9 @@ template("optional") {
if (defined(invoker.public_defines)) {
defines = invoker.public_defines
}
+ if (defined(invoker.public_configs)) {
+ configs = invoker.public_configs
+ }
}
source_set(target_name) {
forward_variables_from(invoker,
@@ -591,6 +621,7 @@ optional("gpu") {
deps += [ ":workaround_list" ]
}
public_defines = []
+ public_configs = []
sources = skia_gpu_sources + skia_sksl_sources + skia_gpu_processor_outputs
@@ -633,10 +664,13 @@ optional("gpu") {
}
if (skia_vulkan_header != "") {
public_defines += [ "SK_VULKAN_HEADER=\"$skia_vulkan_header\"" ]
- } else {
- if (is_skia_dev_build) {
- public_defines += [ "SK_VULKAN_HEADER=\"GrVulkanDefines.h\"" ]
- }
+ } else if (skia_moltenvk_path != "") {
+ public_defines += [ "SK_VULKAN_HEADER=<MoltenVK/mvk_vulkan.h>" ]
+ } else if (is_skia_dev_build) {
+ public_defines += [ "SK_VULKAN_HEADER=\"GrVulkanDefines.h\"" ]
+ }
+ if (skia_moltenvk_path != "") {
+ public_configs += [ ":moltenvk" ]
}
}
if (skia_use_legacy_gpu_pixel_ops) {
diff --git a/tools/gpu/vk/VkTestUtils.cpp b/tools/gpu/vk/VkTestUtils.cpp
index 3033076a4c..c28a42b2c9 100644
--- a/tools/gpu/vk/VkTestUtils.cpp
+++ b/tools/gpu/vk/VkTestUtils.cpp
@@ -15,6 +15,12 @@ namespace sk_gpu_test {
bool LoadVkLibraryAndGetProcAddrFuncs(PFN_vkGetInstanceProcAddr* instProc,
PFN_vkGetDeviceProcAddr* devProc) {
+#ifdef SK_MOLTENVK
+ // MoltenVK is a statically linked framework, so there is no Vulkan library to load.
+ *instProc = &vkGetInstanceProcAddr;
+ *devProc = &vkGetDeviceProcAddr;
+ return true;
+#else
static void* vkLib = nullptr;
static PFN_vkGetInstanceProcAddr localInstProc = nullptr;
static PFN_vkGetDeviceProcAddr localDevProc = nullptr;
@@ -38,6 +44,7 @@ bool LoadVkLibraryAndGetProcAddrFuncs(PFN_vkGetInstanceProcAddr* instProc,
*instProc = localInstProc;
*devProc = localDevProc;
return true;
+#endif
}
}