skia2/include/gpu/vk/GrVkExtensions.h
Greg Daniel c0b03d8dfc Start adding support for some base extensions which others build on.
Many of the other extensions in Vulkan rely on these some just want to
get these landed so we can start building on top of them.

Bug: skia:
Change-Id: Icef82c169cd50ff51b97fe065923531ef2940319
Reviewed-on: https://skia-review.googlesource.com/145362
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
2018-08-06 14:26:15 +00:00

64 lines
1.7 KiB
C++

/*
* 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/GrVkTypes.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