diff options
Diffstat (limited to 'src/gpu/vk/GrVkExtensions.h')
-rw-r--r-- | src/gpu/vk/GrVkExtensions.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/gpu/vk/GrVkExtensions.h b/src/gpu/vk/GrVkExtensions.h new file mode 100644 index 0000000000..8de28f4d49 --- /dev/null +++ b/src/gpu/vk/GrVkExtensions.h @@ -0,0 +1,50 @@ +/* + * 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 "../private/SkTArray.h" +#include "SkString.h" +#include "vk/GrVkDefines.h" +#include "vk/GrVkInterface.h" + +/** + * This helper queries the Vulkan driver for available extensions and layers, remembers them, + * and can be queried. It supports queries for both instance and device extensions and layers. + */ +class SK_API GrVkExtensions { +public: + GrVkExtensions(GrVkInterface::GetProc getProc) + : fGetProc(getProc) + , fInstanceExtensionStrings(new SkTArray<SkString>) + , fDeviceExtensionStrings(new SkTArray<SkString>) + , fInstanceLayerStrings(new SkTArray<SkString>) + , fDeviceLayerStrings(new SkTArray<SkString>) {} + + bool initInstance(uint32_t specVersion); + bool initDevice(uint32_t specVersion, VkInstance, VkPhysicalDevice); + + /** + * Queries whether an extension or layer is present. Will fail if not initialized. + */ + bool hasInstanceExtension(const char[]) const; + bool hasDeviceExtension(const char[]) const; + bool hasInstanceLayer(const char[]) const; + bool hasDeviceLayer(const char[]) const; + + void print(const char* sep = "\n") const; + +private: + GrVkInterface::GetProc fGetProc; + std::unique_ptr<SkTArray<SkString>> fInstanceExtensionStrings; + std::unique_ptr<SkTArray<SkString>> fDeviceExtensionStrings; + std::unique_ptr<SkTArray<SkString>> fInstanceLayerStrings; + std::unique_ptr<SkTArray<SkString>> fDeviceLayerStrings; +}; + +#endif |