| /* | |
| * Copyright 2016 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrVkExtensions_DEFINED | |
| #define GrVkExtensions_DEFINED | |
| #include "include/core/SkString.h" | |
| #include "include/gpu/vk/GrVkTypes.h" | |
| #include "include/private/SkTArray.h" | |
| /** | |
| * Helper class that eats in an array of extensions strings for instance and device and allows for | |
| * quicker querying if an extension is present. | |
| */ | |
| class SK_API GrVkExtensions { | |
| public: | |
| GrVkExtensions() {} | |
| void init(GrVkGetProc, VkInstance, VkPhysicalDevice, | |
| uint32_t instanceExtensionCount, const char* const* instanceExtensions, | |
| uint32_t deviceExtensionCount, const char* const* deviceExtensions); | |
| bool hasExtension(const char[], uint32_t minVersion) const; | |
| struct Info { | |
| Info() {} | |
| Info(const char* name) : fName(name), fSpecVersion(0) {} | |
| SkString fName; | |
| uint32_t fSpecVersion; | |
| struct Less { | |
| bool operator() (const Info& a, const SkString& b) { | |
| return strcmp(a.fName.c_str(), b.c_str()) < 0; | |
| } | |
| bool operator() (const SkString& a, const GrVkExtensions::Info& b) { | |
| return strcmp(a.c_str(), b.fName.c_str()) < 0; | |
| } | |
| }; | |
| }; | |
| #ifdef SK_DEBUG | |
| void dump() const { | |
| SkDebugf("**Vulkan Extensions**\n"); | |
| for (int i = 0; i < fExtensions.count(); ++i) { | |
| SkDebugf("%s. Version: %d\n", | |
| fExtensions[i].fName.c_str(), fExtensions[i].fSpecVersion); | |
| } | |
| SkDebugf("**End Vulkan Extensions**\n"); | |
| } | |
| #endif | |
| private: | |
| void getSpecVersions(GrVkGetProc getProc, VkInstance, VkPhysicalDevice); | |
| SkTArray<Info> fExtensions; | |
| }; | |
| #endif |