aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Giessen <charles@lunarg.com>2022-04-11 14:39:06 -0600
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>2022-04-11 16:33:45 -0600
commit5f3ce24e7a530d089842c8192c2565a672555250 (patch)
tree102273e2a41f9fab0a7c09f38505ca44fbc2b3b7
parent3903162ac4b01ed376bfa55a72ef7217a72c0b74 (diff)
downloadusermoji-5f3ce24e7a530d089842c8192c2565a672555250.tar.xz
cube,vulkaninfo: Add portability_enumeration if present
Make vulkaninfo and vkcube/vkcubepp enable the portability enumeration bit if it is available.
-rw-r--r--cube/cube.c33
-rw-r--r--cube/cube.cpp8
-rw-r--r--vulkaninfo/vulkaninfo.h13
3 files changed, 41 insertions, 13 deletions
diff --git a/cube/cube.c b/cube/cube.c
index e0d8a31a..80946239 100644
--- a/cube/cube.c
+++ b/cube/cube.c
@@ -292,16 +292,20 @@ void dumpVec4(const char *note, vec4 vector) {
fflush(stdout);
}
-char const* to_string(VkPhysicalDeviceType const type)
-{
- switch(type)
- {
- case VK_PHYSICAL_DEVICE_TYPE_OTHER: return "Other";
- case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU: return "IntegratedGpu";
- case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU: return "DiscreteGpu";
- case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU: return "VirtualGpu";
- case VK_PHYSICAL_DEVICE_TYPE_CPU: return "Cpu";
- default: return "Unknown";
+char const *to_string(VkPhysicalDeviceType const type) {
+ switch (type) {
+ case VK_PHYSICAL_DEVICE_TYPE_OTHER:
+ return "Other";
+ case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:
+ return "IntegratedGpu";
+ case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:
+ return "DiscreteGpu";
+ case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:
+ return "VirtualGpu";
+ case VK_PHYSICAL_DEVICE_TYPE_CPU:
+ return "Cpu";
+ default:
+ return "Unknown";
}
}
@@ -1464,7 +1468,6 @@ static void demo_prepare_depth(struct demo *demo) {
.viewType = VK_IMAGE_VIEW_TYPE_2D,
};
-
if (demo->force_errors) {
// Intentionally force a bad pNext value to generate a validation layer error
view.pNext = &image;
@@ -3178,6 +3181,7 @@ static void demo_init_vk(struct demo *demo) {
/* Look for instance extensions */
VkBool32 surfaceExtFound = 0;
VkBool32 platformSurfaceExtFound = 0;
+ bool portabilityEnumerationActive = false;
memset(demo->extension_names, 0, sizeof(demo->extension_names));
err = vkEnumerateInstanceExtensionProperties(NULL, &instance_extension_count, NULL);
@@ -3241,6 +3245,12 @@ static void demo_init_vk(struct demo *demo) {
demo->extension_names[demo->enabled_extension_count++] = VK_EXT_DEBUG_UTILS_EXTENSION_NAME;
}
}
+ // We want cube to be able to enumerate drivers that support the portability_subset extension, so we have to enable the
+ // portability enumeration extension.
+ if (!strcmp(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME, instance_extensions[i].extensionName)) {
+ portabilityEnumerationActive = true;
+ demo->extension_names[demo->enabled_extension_count++] = VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME;
+ }
assert(demo->enabled_extension_count < 64);
}
@@ -3317,6 +3327,7 @@ static void demo_init_vk(struct demo *demo) {
VkInstanceCreateInfo inst_info = {
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pNext = NULL,
+ .flags = (portabilityEnumerationActive ? VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR : 0),
.pApplicationInfo = &app,
.enabledLayerCount = demo->enabled_layer_count,
.ppEnabledLayerNames = (const char *const *)instance_validation_layers,
diff --git a/cube/cube.cpp b/cube/cube.cpp
index fdba5578..03fd65b4 100644
--- a/cube/cube.cpp
+++ b/cube/cube.cpp
@@ -1116,6 +1116,7 @@ void Demo::init_vk() {
/* Look for instance extensions */
vk::Bool32 surfaceExtFound = VK_FALSE;
vk::Bool32 platformSurfaceExtFound = VK_FALSE;
+ bool portabilityEnumerationActive = false;
auto instance_extensions_return = vk::enumerateInstanceExtensionProperties();
VERIFY(instance_extensions_return.result == vk::Result::eSuccess);
@@ -1126,6 +1127,11 @@ void Demo::init_vk() {
} else if (!strcmp(VK_EXT_DEBUG_UTILS_EXTENSION_NAME, extension.extensionName)) {
use_debug_messenger = true;
enabled_instance_extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
+ } else if (!strcmp(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME, extension.extensionName)) {
+ // We want cube to be able to enumerate drivers that support the portability_subset extension, so we have to enable the
+ // portability enumeration extension.
+ portabilityEnumerationActive = true;
+ enabled_instance_extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
} else if (!strcmp(VK_KHR_SURFACE_EXTENSION_NAME, extension.extensionName)) {
surfaceExtFound = 1;
enabled_instance_extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME);
@@ -1237,6 +1243,8 @@ void Demo::init_vk() {
.setPEngineName(APP_SHORT_NAME)
.setEngineVersion(0);
auto const inst_info = vk::InstanceCreateInfo()
+ .setFlags(portabilityEnumerationActive ? vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR
+ : static_cast<vk::InstanceCreateFlagBits>(0))
.setPNext((use_debug_messenger && validate) ? &debug_utils_create_info : nullptr)
.setPApplicationInfo(&app)
.setPEnabledLayerNames(enabled_layers)
diff --git a/vulkaninfo/vulkaninfo.h b/vulkaninfo/vulkaninfo.h
index c1baba49..087bd917 100644
--- a/vulkaninfo/vulkaninfo.h
+++ b/vulkaninfo/vulkaninfo.h
@@ -645,8 +645,17 @@ struct AppInstance {
std::vector<const char *> inst_exts;
for (const auto &ext : inst_extensions) inst_exts.push_back(ext.c_str());
- const VkInstanceCreateInfo inst_info = {VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, &dbg_info, 0, &app_info, 0, nullptr,
- static_cast<uint32_t>(inst_exts.size()), inst_exts.data()};
+ const VkInstanceCreateInfo inst_info = {
+ VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+ &dbg_info,
+ (CheckExtensionEnabled(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)
+ ? static_cast<VkInstanceCreateFlags>(VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR)
+ : 0),
+ &app_info,
+ 0,
+ nullptr,
+ static_cast<uint32_t>(inst_exts.size()),
+ inst_exts.data()};
VkResult err = dll.fp_vkCreateInstance(&inst_info, nullptr, &instance);
if (err == VK_ERROR_INCOMPATIBLE_DRIVER) {