demos: Update demos and tests to use vkGetGlobalExtensionInfo to check extensions
diff --git a/demos/cube.c b/demos/cube.c
index 8927a0a..3516e00 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -1651,7 +1651,25 @@
static void demo_init_vk(struct demo *demo)
{
- // TODO : Should query count w/ GetGlobalExtensionInfo, then enable via CreateInstance
+ VkResult err;
+ // Extensions to enable
+ const char *ext_names[] = {
+ "VK_WSI_X11",
+ };
+ size_t extSize = sizeof(uint32_t);
+ uint32_t extCount = 0;
+ err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_COUNT, 0, &extSize, &extCount);
+ assert(!err);
+
+ VkExtensionProperties extProp;
+ extSize = sizeof(VkExtensionProperties);
+ bool32_t extFound = 0;
+ for (uint32_t i = 0; i < extCount; i++) {
+ err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_PROPERTIES, i, &extSize, &extProp);
+ if (!strcmp(ext_names[0], extProp.extName))
+ extFound = 1;
+ }
+ assert(extFound);
const VkApplicationInfo app = {
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.pNext = NULL,
@@ -1666,8 +1684,8 @@
.pNext = NULL,
.pAppInfo = &app,
.pAllocCb = NULL,
- .extensionCount = 0,
- .ppEnabledExtensionNames = NULL,
+ .extensionCount = 1,
+ .ppEnabledExtensionNames = ext_names,
};
const VK_WSI_X11_CONNECTION_INFO connection = {
.pConnection = demo->connection,
@@ -1679,20 +1697,15 @@
.queueCount = 1,
};
- const char *ext_names[] = {
- "VK_WSI_X11",
- };
-
const VkDeviceCreateInfo device = {
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
.pNext = NULL,
.queueRecordCount = 1,
.pRequestedQueues = &queue,
- .extensionCount = 1, // TODO : Should query count w/ GetGlobalExtensionInfo
+ .extensionCount = 1,
.ppEnabledExtensionNames = ext_names,
.flags = VK_DEVICE_CREATE_VALIDATION_BIT,
};
- VkResult err;
uint32_t gpu_count;
uint32_t i;
size_t data_size;
diff --git a/demos/tri.c b/demos/tri.c
index 847e273..f8f3edd 100644
--- a/demos/tri.c
+++ b/demos/tri.c
@@ -1192,7 +1192,25 @@
static void demo_init_vk(struct demo *demo)
{
- // TODO : Should query count w/ GetGlobalExtensionInfo, then enable via CreateInstance
+ VkResult err;
+ // Extensions to enable
+ const char *ext_names[] = {
+ "VK_WSI_X11",
+ };
+ size_t extSize = sizeof(uint32_t);
+ uint32_t extCount = 0;
+ err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_COUNT, 0, &extSize, &extCount);
+ assert(!err);
+
+ VkExtensionProperties extProp;
+ extSize = sizeof(VkExtensionProperties);
+ bool32_t extFound = 0;
+ for (uint32_t i = 0; i < extCount; i++) {
+ err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_PROPERTIES, i, &extSize, &extProp);
+ if (!strcmp(ext_names[0], extProp.extName))
+ extFound = 1;
+ }
+ assert(extFound);
const VkApplicationInfo app = {
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.pNext = NULL,
@@ -1207,8 +1225,8 @@
.pNext = NULL,
.pAppInfo = &app,
.pAllocCb = NULL,
- .extensionCount = 0,
- .ppEnabledExtensionNames = NULL,
+ .extensionCount = 1,
+ .ppEnabledExtensionNames = ext_names,
};
const VK_WSI_X11_CONNECTION_INFO connection = {
.pConnection = demo->connection,
@@ -1219,19 +1237,15 @@
.queueNodeIndex = 0,
.queueCount = 1,
};
- const char *ext_names[] = {
- "VK_WSI_X11",
- };
const VkDeviceCreateInfo device = {
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
.pNext = NULL,
.queueRecordCount = 1,
.pRequestedQueues = &queue,
- .extensionCount = 1, // TODO : Should query count w/ GetGlobalExtensionInfo
+ .extensionCount = 1,
.ppEnabledExtensionNames = ext_names,
.flags = VK_DEVICE_CREATE_VALIDATION_BIT,
};
- VkResult err;
uint32_t gpu_count;
uint32_t i;
size_t data_size;
diff --git a/demos/vulkaninfo.c b/demos/vulkaninfo.c
index 2fc76eb..2353ff2 100644
--- a/demos/vulkaninfo.c
+++ b/demos/vulkaninfo.c
@@ -364,22 +364,27 @@
static void app_gpu_init_extensions(struct app_gpu *gpu)
{
- //VkResult err;
- uint32_t i;
- // TODO : Should query count w/ GetGlobalExtensionInfo,
- // Then dynamically set extensions based on returned count
-
+ VkResult err;
+ // Extensions to enable
static char *known_extensions[] = {
"VK_WSI_X11",
};
+ size_t extSize = sizeof(uint32_t);
+ uint32_t extCount = 0;
+ err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_COUNT, 0, &extSize, &extCount);
+ assert(!err);
- for (i = 0; i < ARRAY_SIZE(known_extensions); i++) {
-/*
- err = vkGetExtensionSupport(gpu->obj, known_extensions[i]);
- if (!err)
-*/
- gpu->extension_count++;
+ VkExtensionProperties extProp;
+ extSize = sizeof(VkExtensionProperties);
+ bool32_t extFound = 0; // TODO : Need to enhance this if/when we enable multiple extensions
+ for (uint32_t i = 0; i < extCount; i++) {
+ err = vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_PROPERTIES, i, &extSize, &extProp);
+ if (!strcmp(known_extensions[0], extProp.extName)) {
+ extFound = 1;
+ gpu->extension_count++;
+ }
}
+ assert(extFound);
gpu->extensions =
malloc(sizeof(gpu->extensions[0]) * gpu->extension_count);
@@ -387,11 +392,9 @@
ERR_EXIT(VK_ERROR_OUT_OF_HOST_MEMORY);
gpu->extension_count = 0;
+ uint32_t i;
for (i = 0; i < ARRAY_SIZE(known_extensions); i++) {
-/*
- err = vkGetExtensionSupport(gpu->obj, known_extensions[i]);
- if (!err)
-*/
+ // known_extensions were validated above so copy them over here
gpu->extensions[gpu->extension_count++] = known_extensions[i];
}
}
diff --git a/tests/vktestbinding.cpp b/tests/vktestbinding.cpp
index cce7fbb..c41761b 100644
--- a/tests/vktestbinding.cpp
+++ b/tests/vktestbinding.cpp
@@ -148,17 +148,25 @@
std::vector<const char *> PhysicalGpu::extensions() const
{
- // TODO : Should fill this out using GetGlobalExtensionInfo to query count
- // Then fill in extensions based on that count
+ // Extensions to enable
static const char *known_exts[] = {
"VK_WSI_X11",
};
-
std::vector<const char *> exts;
- for (int i = 0; i < sizeof(known_exts) / sizeof(known_exts[0]); i++) {
-// VkResult err = vkGetExtensionSupport(gpu_, known_exts[i]);
-// if (err == VK_SUCCESS)
- exts.push_back(known_exts[i]);
+ size_t extSize = sizeof(uint32_t);
+ uint32_t extCount = 0;
+ if (!EXPECT(vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_COUNT, 0, &extSize, &extCount) == VK_SUCCESS))
+ return exts;
+
+ VkExtensionProperties extProp;
+ extSize = sizeof(VkExtensionProperties);
+ // TODO : Need to update this if/when we have more than 1 extension to enable
+ for (uint32_t i = 0; i < extCount; i++) {
+ if (!EXPECT(vkGetGlobalExtensionInfo(VK_EXTENSION_INFO_TYPE_PROPERTIES, i, &extSize, &extProp) == VK_SUCCESS))
+ return exts;
+
+ if (!strcmp(known_exts[0], extProp.extName))
+ exts.push_back(known_exts[i]);
}
return exts;