| /* |
| * 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) const { |
| return strcmp(a.fName.c_str(), b.c_str()) < 0; |
| } |
| bool operator()(const SkString& a, const GrVkExtensions::Info& b) const { |
| 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 |