From 3251ed84052ced22d1e4c285524a835a82f7dd12 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Wed, 5 Apr 2017 09:52:55 -0700 Subject: Refactor Vulkan support to support Fuchsia - Refactor runtime lookup of Vulkan functions - Support Magma surfaces - Add build flags to toggle Vulkan support BUG=skia: Change-Id: Ic71965c453507882521443006c4155c7481a9a3f Reviewed-on: https://skia-review.googlesource.com/9342 Commit-Queue: Greg Daniel Commit-Queue: Mike Klein Reviewed-by: Mike Klein Reviewed-by: Greg Daniel Reviewed-by: Michael Jurka Reviewed-by: Mike Klein --- src/gpu/vk/GrVkExtensions.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'src/gpu/vk/GrVkExtensions.cpp') diff --git a/src/gpu/vk/GrVkExtensions.cpp b/src/gpu/vk/GrVkExtensions.cpp index 03b453090f..17737f1799 100644 --- a/src/gpu/vk/GrVkExtensions.cpp +++ b/src/gpu/vk/GrVkExtensions.cpp @@ -30,17 +30,21 @@ static int find_string(const SkTArray& strings, const char ext[]) { return idx; } -#define GET_PROC_LOCAL(inst, F) PFN_vk ## F F = (PFN_vk ## F) vkGetInstanceProcAddr(inst, "vk" #F) +#define GET_PROC_LOCAL(F, inst, device) PFN_vk ## F F = (PFN_vk ## F) fGetProc("vk" #F, inst, device) static uint32_t remove_patch_version(uint32_t specVersion) { return (specVersion >> 12) << 12; } bool GrVkExtensions::initInstance(uint32_t specVersion) { + if (fGetProc == nullptr) { + return false; + } + uint32_t nonPatchVersion = remove_patch_version(specVersion); - GET_PROC_LOCAL(nullptr, EnumerateInstanceExtensionProperties); - GET_PROC_LOCAL(nullptr, EnumerateInstanceLayerProperties); + GET_PROC_LOCAL(EnumerateInstanceExtensionProperties, VK_NULL_HANDLE, VK_NULL_HANDLE); + GET_PROC_LOCAL(EnumerateInstanceLayerProperties, VK_NULL_HANDLE, VK_NULL_HANDLE); SkTLessFunctionToFunctorAdaptor cmp; @@ -126,10 +130,14 @@ bool GrVkExtensions::initInstance(uint32_t specVersion) { } bool GrVkExtensions::initDevice(uint32_t specVersion, VkInstance inst, VkPhysicalDevice physDev) { + if (fGetProc == nullptr) { + return false; + } + uint32_t nonPatchVersion = remove_patch_version(specVersion); - GET_PROC_LOCAL(inst, EnumerateDeviceExtensionProperties); - GET_PROC_LOCAL(inst, EnumerateDeviceLayerProperties); + GET_PROC_LOCAL(EnumerateDeviceExtensionProperties, inst, VK_NULL_HANDLE); + GET_PROC_LOCAL(EnumerateDeviceLayerProperties, inst, VK_NULL_HANDLE); SkTLessFunctionToFunctorAdaptor cmp; -- cgit v1.2.3