Reland "Reland "Let client pass in full extension to GrVkBackendContext.""
This reverts commit dc13c21b1e49ca1e16251d01bd1062157c5c1c2b.
Reason for revert: fuchsia should be fixed
Original change's description:
> Revert "Reland "Let client pass in full extension to GrVkBackendContext.""
>
> This reverts commit a782dcb3c407a7e30d7c1263bf9965792088e786.
>
> Reason for revert: fuchsia changes reverted
>
> Original change's description:
> > Reland "Let client pass in full extension to GrVkBackendContext."
> >
> > This reverts commit cb92b26e5ca6063bcf1a922109b8224e0b6eb4da.
> >
> > Reason for revert: <INSERT REASONING HERE>
> >
> > Original change's description:
> > > Revert "Let client pass in full extension to GrVkBackendContext."
> > >
> > > This reverts commit 45c9dab4c3ec43cedb28d1b8c08e166fe0c2e767.
> > >
> > > Reason for revert: fucshia uses GrVkBackendContext. Need to revert earlier changes
> > >
> > > Original change's description:
> > > > Let client pass in full extension to GrVkBackendContext.
> > > >
> > > > Bug: skia:
> > > > Change-Id: I772ab4ccbca0f4f7e7d429d6c421b07d97f0606f
> > > > Reviewed-on: https://skia-review.googlesource.com/131880
> > > > Reviewed-by: Jim Van Verth <jvanverth@google.com>
> > > > Commit-Queue: Greg Daniel <egdaniel@google.com>
> > >
> > > TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com
> > >
> > > Change-Id: I1a765ff406c83cb234c3614b804fbed677d5a382
> > > No-Presubmit: true
> > > No-Tree-Checks: true
> > > No-Try: true
> > > Bug: skia:
> > > Reviewed-on: https://skia-review.googlesource.com/137901
> > > Reviewed-by: Greg Daniel <egdaniel@google.com>
> > > Commit-Queue: Greg Daniel <egdaniel@google.com>
> >
> > TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com
> >
> > # Not skipping CQ checks because original CL landed > 1 day ago.
> >
> > Bug: skia:
> > Change-Id: I0af797c51dde705473e9afaccb1d4b4423e8c41e
> > Reviewed-on: https://skia-review.googlesource.com/138302
> > Commit-Queue: Greg Daniel <egdaniel@google.com>
> > Reviewed-by: Greg Daniel <egdaniel@google.com>
>
> TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com
>
> Change-Id: Idf760d5ac6b82df33a4408079a0223be833058ad
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: skia:
> Reviewed-on: https://skia-review.googlesource.com/138420
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Greg Daniel <egdaniel@google.com>
TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: skia:
Change-Id: Ied1323b7197b600e895d85ac7e85d6f65985dabc
Reviewed-on: https://skia-review.googlesource.com/139002
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/vk/GrVkExtensions.cpp b/src/gpu/vk/GrVkExtensions.cpp
index e4768d9..6cc20e6 100644
--- a/src/gpu/vk/GrVkExtensions.cpp
+++ b/src/gpu/vk/GrVkExtensions.cpp
@@ -6,7 +6,9 @@
*/
#include "vk/GrVkExtensions.h"
-#include "vk/GrVkUtil.h"
+
+// Can remove this once we get rid of the extension flags.
+#include "vk/GrVkBackendContext.h"
#include "SkTSearch.h"
#include "SkTSort.h"
@@ -30,232 +32,31 @@
return idx;
}
-#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(EnumerateInstanceExtensionProperties, VK_NULL_HANDLE, VK_NULL_HANDLE);
- GET_PROC_LOCAL(EnumerateInstanceLayerProperties, VK_NULL_HANDLE, VK_NULL_HANDLE);
-
+void GrVkExtensions::init(uint32_t instanceExtensionCount,
+ const char* const* instanceExtensions,
+ uint32_t deviceExtensionCount,
+ const char* const* deviceExtensions) {
SkTLessFunctionToFunctorAdaptor<SkString, extension_compare> cmp;
- if (!EnumerateInstanceExtensionProperties ||
- !EnumerateInstanceLayerProperties) {
- return false;
- }
-
- // instance layers
- uint32_t layerCount = 0;
- VkResult res = EnumerateInstanceLayerProperties(&layerCount, nullptr);
- if (VK_SUCCESS != res) {
- return false;
- }
- VkLayerProperties* layers = new VkLayerProperties[layerCount];
- res = EnumerateInstanceLayerProperties(&layerCount, layers);
- if (VK_SUCCESS != res) {
- delete[] layers;
- return false;
- }
- for (uint32_t i = 0; i < layerCount; ++i) {
- if (nonPatchVersion <= remove_patch_version(layers[i].specVersion)) {
- fInstanceLayerStrings->push_back() = layers[i].layerName;
+ for (uint32_t i = 0; i < instanceExtensionCount; ++i) {
+ const char* extension = instanceExtensions[i];
+ // if not already in the list, add it
+ if (find_string(fExtensionStrings, extension) < 0) {
+ fExtensionStrings.push_back() = extension;
+ SkTQSort(&fExtensionStrings.front(), &fExtensionStrings.back(), cmp);
}
}
- delete[] layers;
- if (!fInstanceLayerStrings->empty()) {
- SkTQSort(&fInstanceLayerStrings->front(), &fInstanceLayerStrings->back(), cmp);
- }
-
- // instance extensions
- // via Vulkan implementation and implicitly enabled layers
- uint32_t extensionCount = 0;
- res = EnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
- if (VK_SUCCESS != res) {
- return false;
- }
- VkExtensionProperties* extensions = new VkExtensionProperties[extensionCount];
- res = EnumerateInstanceExtensionProperties(nullptr, &extensionCount, extensions);
- if (VK_SUCCESS != res) {
- delete[] extensions;
- return false;
- }
- for (uint32_t i = 0; i < extensionCount; ++i) {
- fInstanceExtensionStrings->push_back() = extensions[i].extensionName;
- }
- delete [] extensions;
- // sort so we can search
- if (!fInstanceExtensionStrings->empty()) {
- SkTQSort(&fInstanceExtensionStrings->front(), &fInstanceExtensionStrings->back(), cmp);
- }
- // via explicitly enabled layers
- layerCount = fInstanceLayerStrings->count();
- for (uint32_t layerIndex = 0; layerIndex < layerCount; ++layerIndex) {
- uint32_t extensionCount = 0;
- res = EnumerateInstanceExtensionProperties((*fInstanceLayerStrings)[layerIndex].c_str(),
- &extensionCount, nullptr);
- if (VK_SUCCESS != res) {
- return false;
+ for (uint32_t i = 0; i < deviceExtensionCount; ++i) {
+ const char* extension = deviceExtensions[i];
+ // if not already in the list, add it
+ if (find_string(fExtensionStrings, extension) < 0) {
+ fExtensionStrings.push_back() = extension;
+ SkTQSort(&fExtensionStrings.front(), &fExtensionStrings.back(), cmp);
}
- VkExtensionProperties* extensions = new VkExtensionProperties[extensionCount];
- res = EnumerateInstanceExtensionProperties((*fInstanceLayerStrings)[layerIndex].c_str(),
- &extensionCount, extensions);
- if (VK_SUCCESS != res) {
- delete[] extensions;
- return false;
- }
- for (uint32_t i = 0; i < extensionCount; ++i) {
- // if not already in the list, add it
- if (find_string(*fInstanceExtensionStrings, extensions[i].extensionName) < 0) {
- fInstanceExtensionStrings->push_back() = extensions[i].extensionName;
- SkTQSort(&fInstanceExtensionStrings->front(), &fInstanceExtensionStrings->back(),
- cmp);
- }
- }
- delete[] extensions;
}
-
- return true;
}
-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(EnumerateDeviceExtensionProperties, inst, VK_NULL_HANDLE);
- GET_PROC_LOCAL(EnumerateDeviceLayerProperties, inst, VK_NULL_HANDLE);
-
- SkTLessFunctionToFunctorAdaptor<SkString, extension_compare> cmp;
-
- if (!EnumerateDeviceExtensionProperties ||
- !EnumerateDeviceLayerProperties) {
- return false;
- }
-
- // device layers
- uint32_t layerCount = 0;
- VkResult res = EnumerateDeviceLayerProperties(physDev, &layerCount, nullptr);
- if (VK_SUCCESS != res) {
- return false;
- }
- VkLayerProperties* layers = new VkLayerProperties[layerCount];
- res = EnumerateDeviceLayerProperties(physDev, &layerCount, layers);
- if (VK_SUCCESS != res) {
- delete[] layers;
- return false;
- }
- for (uint32_t i = 0; i < layerCount; ++i) {
- if (nonPatchVersion <= remove_patch_version(layers[i].specVersion)) {
- fDeviceLayerStrings->push_back() = layers[i].layerName;
- }
- }
- delete[] layers;
- if (!fDeviceLayerStrings->empty()) {
- SkTLessFunctionToFunctorAdaptor<SkString, extension_compare> cmp;
- SkTQSort(&fDeviceLayerStrings->front(), &fDeviceLayerStrings->back(), cmp);
- }
-
- // device extensions
- // via Vulkan implementation and implicitly enabled layers
- uint32_t extensionCount = 0;
- res = EnumerateDeviceExtensionProperties(physDev, nullptr, &extensionCount, nullptr);
- if (VK_SUCCESS != res) {
- return false;
- }
- VkExtensionProperties* extensions = new VkExtensionProperties[extensionCount];
- res = EnumerateDeviceExtensionProperties(physDev, nullptr, &extensionCount, extensions);
- if (VK_SUCCESS != res) {
- delete[] extensions;
- return false;
- }
- for (uint32_t i = 0; i < extensionCount; ++i) {
- fDeviceExtensionStrings->push_back() = extensions[i].extensionName;
- }
- delete[] extensions;
- if (!fDeviceExtensionStrings->empty()) {
- SkTLessFunctionToFunctorAdaptor<SkString, extension_compare> cmp;
- SkTQSort(&fDeviceExtensionStrings->front(), &fDeviceExtensionStrings->back(), cmp);
- }
- // via explicitly enabled layers
- layerCount = fDeviceLayerStrings->count();
- for (uint32_t layerIndex = 0; layerIndex < layerCount; ++layerIndex) {
- uint32_t extensionCount = 0;
- res = EnumerateDeviceExtensionProperties(physDev,
- (*fDeviceLayerStrings)[layerIndex].c_str(),
- &extensionCount, nullptr);
- if (VK_SUCCESS != res) {
- return false;
- }
- VkExtensionProperties* extensions = new VkExtensionProperties[extensionCount];
- res = EnumerateDeviceExtensionProperties(physDev,
- (*fDeviceLayerStrings)[layerIndex].c_str(),
- &extensionCount, extensions);
- if (VK_SUCCESS != res) {
- delete[] extensions;
- return false;
- }
- for (uint32_t i = 0; i < extensionCount; ++i) {
- // if not already in the list, add it
- if (find_string(*fDeviceExtensionStrings, extensions[i].extensionName) < 0) {
- fDeviceExtensionStrings->push_back() = extensions[i].extensionName;
- SkTQSort(&fDeviceExtensionStrings->front(), &fDeviceExtensionStrings->back(), cmp);
- }
- }
- delete[] extensions;
- }
-
- return true;
+bool GrVkExtensions::hasExtension(const char ext[]) const {
+ return find_string(fExtensionStrings, ext) >= 0;
}
-bool GrVkExtensions::hasInstanceExtension(const char ext[]) const {
- return find_string(*fInstanceExtensionStrings, ext) >= 0;
-}
-
-bool GrVkExtensions::hasDeviceExtension(const char ext[]) const {
- return find_string(*fDeviceExtensionStrings, ext) >= 0;
-}
-
-bool GrVkExtensions::hasInstanceLayer(const char ext[]) const {
- return find_string(*fInstanceLayerStrings, ext) >= 0;
-}
-
-bool GrVkExtensions::hasDeviceLayer(const char ext[]) const {
- return find_string(*fDeviceLayerStrings, ext) >= 0;
-}
-
-void GrVkExtensions::print(const char* sep) const {
- if (nullptr == sep) {
- sep = " ";
- }
- int cnt = fInstanceExtensionStrings->count();
- SkDebugf("Instance Extensions: ");
- for (int i = 0; i < cnt; ++i) {
- SkDebugf("%s%s", (*fInstanceExtensionStrings)[i].c_str(), (i < cnt - 1) ? sep : "");
- }
- cnt = fDeviceExtensionStrings->count();
- SkDebugf("\nDevice Extensions: ");
- for (int i = 0; i < cnt; ++i) {
- SkDebugf("%s%s", (*fDeviceExtensionStrings)[i].c_str(), (i < cnt - 1) ? sep : "");
- }
- cnt = fInstanceLayerStrings->count();
- SkDebugf("\nInstance Layers: ");
- for (int i = 0; i < cnt; ++i) {
- SkDebugf("%s%s", (*fInstanceLayerStrings)[i].c_str(), (i < cnt - 1) ? sep : "");
- }
- cnt = fDeviceLayerStrings->count();
- SkDebugf("\nDevice Layers: ");
- for (int i = 0; i < cnt; ++i) {
- SkDebugf("%s%s", (*fDeviceLayerStrings)[i].c_str(), (i < cnt - 1) ? sep : "");
- }
-}