mirror of
https://github.com/charles-lunarg/vk-bootstrap.git
synced 2024-09-19 23:52:17 +00:00
Alphabetize features and move them into separate desktop and mobile categories.
This commit is contained in:
parent
d6d63121e9
commit
24f5559ac6
@ -25,80 +25,100 @@ struct StructureWrapper {
|
|||||||
other.pStructure = nullptr;
|
other.pStructure = nullptr;
|
||||||
}
|
}
|
||||||
StructureWrapper& operator=(StructureWrapper&& other) noexcept {
|
StructureWrapper& operator=(StructureWrapper&& other) noexcept {
|
||||||
delete pStructure;
|
if (this != &other) {
|
||||||
pStructure = other.pStructure;
|
if (pStructure) delete pStructure;
|
||||||
other.pStructure = nullptr;
|
pStructure = other.pStructure;
|
||||||
|
other.pStructure = nullptr;
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
VkBaseOutStructure* pStructure = nullptr;
|
VkBaseOutStructure* pStructure = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline VkPhysicalDeviceFeatures get_common_1_0_features() {
|
inline VkPhysicalDeviceFeatures get_common_1_0_features() {
|
||||||
|
// Only enable features that are on >95% devices
|
||||||
VkPhysicalDeviceFeatures features{};
|
VkPhysicalDeviceFeatures features{};
|
||||||
|
features.depthBiasClamp = true;
|
||||||
|
features.fragmentStoresAndAtomics = true;
|
||||||
features.fullDrawIndexUint32 = true;
|
features.fullDrawIndexUint32 = true;
|
||||||
features.imageCubeArray = true;
|
features.imageCubeArray = true;
|
||||||
features.independentBlend = true;
|
features.independentBlend = true;
|
||||||
features.geometryShader = true;
|
features.largePoints = true;
|
||||||
features.tessellationShader = true;
|
|
||||||
features.sampleRateShading = true;
|
features.sampleRateShading = true;
|
||||||
|
features.shaderImageGatherExtended = true;
|
||||||
|
features.shaderSampledImageArrayDynamicIndexing = true;
|
||||||
|
features.shaderUniformBufferArrayDynamicIndexing = true;
|
||||||
|
return features;
|
||||||
|
}
|
||||||
|
// Extends get_common_1_0_features with common desktop features
|
||||||
|
inline VkPhysicalDeviceFeatures get_common_1_0_desktop_features() {
|
||||||
|
auto features = get_common_1_0_features();
|
||||||
|
features.depthClamp = true;
|
||||||
|
features.drawIndirectFirstInstance = true;
|
||||||
features.dualSrcBlend = true;
|
features.dualSrcBlend = true;
|
||||||
|
features.fillModeNonSolid = true;
|
||||||
|
features.geometryShader = true;
|
||||||
features.logicOp = true;
|
features.logicOp = true;
|
||||||
features.multiDrawIndirect = true;
|
features.multiDrawIndirect = true;
|
||||||
features.drawIndirectFirstInstance = true;
|
|
||||||
features.depthClamp = true;
|
|
||||||
features.depthBiasClamp = true;
|
|
||||||
features.fillModeNonSolid = true;
|
|
||||||
features.wideLines = true;
|
|
||||||
features.largePoints = true;
|
|
||||||
features.multiViewport = true;
|
features.multiViewport = true;
|
||||||
features.samplerAnisotropy = true;
|
|
||||||
features.pipelineStatisticsQuery = true;
|
|
||||||
features.textureCompressionBC = true;
|
|
||||||
features.occlusionQueryPrecise = true;
|
features.occlusionQueryPrecise = true;
|
||||||
features.vertexPipelineStoresAndAtomics = true;
|
features.pipelineStatisticsQuery = true;
|
||||||
features.fragmentStoresAndAtomics = true;
|
features.samplerAnisotropy = true;
|
||||||
features.shaderTessellationAndGeometryPointSize = true;
|
|
||||||
features.shaderImageGatherExtended = true;
|
|
||||||
features.shaderStorageImageExtendedFormats = true;
|
|
||||||
features.shaderStorageImageWriteWithoutFormat = true;
|
|
||||||
features.shaderUniformBufferArrayDynamicIndexing = true;
|
|
||||||
features.shaderSampledImageArrayDynamicIndexing = true;
|
|
||||||
features.shaderStorageBufferArrayDynamicIndexing = true;
|
|
||||||
features.shaderStorageImageArrayDynamicIndexing = true;
|
|
||||||
features.shaderClipDistance = true;
|
features.shaderClipDistance = true;
|
||||||
features.shaderCullDistance = true;
|
features.shaderCullDistance = true;
|
||||||
|
features.shaderStorageBufferArrayDynamicIndexing = true;
|
||||||
|
features.shaderStorageImageArrayDynamicIndexing = true;
|
||||||
|
features.shaderStorageImageExtendedFormats = true;
|
||||||
|
features.shaderStorageImageWriteWithoutFormat = true;
|
||||||
|
features.shaderTessellationAndGeometryPointSize = true;
|
||||||
|
features.tessellationShader = true;
|
||||||
|
features.textureCompressionBC = true;
|
||||||
features.variableMultisampleRate = true;
|
features.variableMultisampleRate = true;
|
||||||
|
features.vertexPipelineStoresAndAtomics = true;
|
||||||
|
features.wideLines = true;
|
||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline VkPhysicalDeviceVulkan11Features get_common_1_1_features() {
|
inline VkPhysicalDeviceVulkan11Features get_common_1_1_features() {
|
||||||
VkPhysicalDeviceVulkan11Features features;
|
VkPhysicalDeviceVulkan11Features features;
|
||||||
features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
|
features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
|
||||||
features.storageBuffer16BitAccess = true;
|
|
||||||
features.uniformAndStorageBuffer16BitAccess = true;
|
|
||||||
features.multiview = true;
|
features.multiview = true;
|
||||||
features.multiviewTessellationShader = true;
|
features.multiviewTessellationShader = true;
|
||||||
features.variablePointersStorageBuffer = true;
|
|
||||||
features.variablePointers = true;
|
|
||||||
features.shaderDrawParameters = true;
|
features.shaderDrawParameters = true;
|
||||||
|
features.storageBuffer16BitAccess = true;
|
||||||
|
features.uniformAndStorageBuffer16BitAccess = true;
|
||||||
|
features.variablePointers = true;
|
||||||
|
features.variablePointersStorageBuffer = true;
|
||||||
|
return features;
|
||||||
|
}
|
||||||
|
// Extends get_common_1_1_features with common desktop features
|
||||||
|
inline VkPhysicalDeviceVulkan11Features get_common_1_1_desktop_features() {
|
||||||
|
auto features = get_common_1_1_features();
|
||||||
|
// nothing to add
|
||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline VkPhysicalDeviceVulkan12Features get_common_1_2_features() {
|
inline VkPhysicalDeviceVulkan12Features get_common_1_2_features() {
|
||||||
VkPhysicalDeviceVulkan12Features features{};
|
VkPhysicalDeviceVulkan12Features features{};
|
||||||
features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
|
features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
|
||||||
features.samplerMirrorClampToEdge = true;
|
|
||||||
features.drawIndirectCount = true;
|
|
||||||
features.descriptorIndexing = true;
|
|
||||||
features.scalarBlockLayout = true;
|
|
||||||
features.imagelessFramebuffer = true;
|
|
||||||
features.uniformBufferStandardLayout = true;
|
|
||||||
features.shaderSubgroupExtendedTypes = true;
|
|
||||||
features.separateDepthStencilLayouts = true;
|
|
||||||
features.hostQueryReset = true;
|
|
||||||
features.timelineSemaphore = true;
|
|
||||||
features.bufferDeviceAddress = true;
|
features.bufferDeviceAddress = true;
|
||||||
|
features.descriptorIndexing = true;
|
||||||
|
features.drawIndirectCount = true;
|
||||||
|
features.hostQueryReset = true;
|
||||||
|
features.imagelessFramebuffer = true;
|
||||||
|
features.samplerMirrorClampToEdge = true;
|
||||||
|
features.scalarBlockLayout = true;
|
||||||
|
features.separateDepthStencilLayouts = true;
|
||||||
|
features.shaderSubgroupExtendedTypes = true;
|
||||||
features.subgroupBroadcastDynamicId = true;
|
features.subgroupBroadcastDynamicId = true;
|
||||||
|
features.timelineSemaphore = true;
|
||||||
|
features.uniformBufferStandardLayout = true;
|
||||||
|
return features;
|
||||||
|
}
|
||||||
|
// Extends get_common_1_2_features with common desktop features
|
||||||
|
inline VkPhysicalDeviceVulkan12Features get_common_1_2_desktop_features() {
|
||||||
|
auto features = get_common_1_2_features();
|
||||||
|
// nothing to add
|
||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
@ -128,7 +148,7 @@ struct VulkanFeatureConfig {
|
|||||||
Configuration for commonly available features in Vulkan 1.0 devices
|
Configuration for commonly available features in Vulkan 1.0 devices
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static VulkanFeatureConfig& get_feature_config_vulkan_1_0_desktop() {
|
inline VulkanFeatureConfig& get_feature_config_vulkan_1_0_desktop() {
|
||||||
static VulkanFeatureConfig config{};
|
static VulkanFeatureConfig config{};
|
||||||
config.features_1_0 = detail::get_common_1_0_features();
|
config.features_1_0 = detail::get_common_1_0_features();
|
||||||
return config;
|
return config;
|
||||||
@ -137,7 +157,7 @@ static VulkanFeatureConfig& get_feature_config_vulkan_1_0_desktop() {
|
|||||||
/*
|
/*
|
||||||
Configuration for commonly available features in Vulkan 1.1 devices
|
Configuration for commonly available features in Vulkan 1.1 devices
|
||||||
*/
|
*/
|
||||||
static VulkanFeatureConfig& get_feature_config_vulkan_1_1_desktop() {
|
inline VulkanFeatureConfig& get_feature_config_vulkan_1_1_desktop() {
|
||||||
static VulkanFeatureConfig config{};
|
static VulkanFeatureConfig config{};
|
||||||
config.api_minor_version = 1;
|
config.api_minor_version = 1;
|
||||||
config.features_1_0 = detail::get_common_1_0_features();
|
config.features_1_0 = detail::get_common_1_0_features();
|
||||||
@ -148,7 +168,7 @@ static VulkanFeatureConfig& get_feature_config_vulkan_1_1_desktop() {
|
|||||||
/*
|
/*
|
||||||
Configuration for commonly available features in Vulkan 1.2 devices
|
Configuration for commonly available features in Vulkan 1.2 devices
|
||||||
*/
|
*/
|
||||||
static VulkanFeatureConfig& get_feature_config_vulkan_1_2_desktop() {
|
inline VulkanFeatureConfig& get_feature_config_vulkan_1_2_desktop() {
|
||||||
static VulkanFeatureConfig config{};
|
static VulkanFeatureConfig config{};
|
||||||
config.api_minor_version = 2;
|
config.api_minor_version = 2;
|
||||||
config.features_1_0 = detail::get_common_1_0_features();
|
config.features_1_0 = detail::get_common_1_0_features();
|
||||||
@ -160,7 +180,7 @@ static VulkanFeatureConfig& get_feature_config_vulkan_1_2_desktop() {
|
|||||||
/*
|
/*
|
||||||
Configuration that requests features available only found in the most recent hardware
|
Configuration that requests features available only found in the most recent hardware
|
||||||
*/
|
*/
|
||||||
static VulkanFeatureConfig& get_feature_config_bleeding_edge_desktop() {
|
inline VulkanFeatureConfig& get_feature_config_bleeding_edge_desktop() {
|
||||||
static VulkanFeatureConfig config{};
|
static VulkanFeatureConfig config{};
|
||||||
config.api_minor_version = 2;
|
config.api_minor_version = 2;
|
||||||
config.required_extensions.push_back("VK_KHR_deferred_host_operations");
|
config.required_extensions.push_back("VK_KHR_deferred_host_operations");
|
||||||
@ -175,24 +195,24 @@ static VulkanFeatureConfig& get_feature_config_bleeding_edge_desktop() {
|
|||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VulkanFeatureConfig& get_feature_config_vulkan_1_0_mobile() {
|
inline VulkanFeatureConfig& get_feature_config_vulkan_1_0_mobile() {
|
||||||
static VulkanFeatureConfig config{};
|
static VulkanFeatureConfig config{};
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VulkanFeatureConfig& get_feature_config_vulkan_1_1_mobile() {
|
inline VulkanFeatureConfig& get_feature_config_vulkan_1_1_mobile() {
|
||||||
static VulkanFeatureConfig config{};
|
static VulkanFeatureConfig config{};
|
||||||
config.api_minor_version = 1;
|
config.api_minor_version = 1;
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VulkanFeatureConfig& get_feature_config_vulkan_1_2_mobile() {
|
inline VulkanFeatureConfig& get_feature_config_vulkan_1_2_mobile() {
|
||||||
static VulkanFeatureConfig config{};
|
static VulkanFeatureConfig config{};
|
||||||
config.api_minor_version = 2;
|
config.api_minor_version = 2;
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VulkanFeatureConfig& get_feature_config_virtual_reality_base() {
|
inline VulkanFeatureConfig& get_feature_config_virtual_reality_base() {
|
||||||
static VulkanFeatureConfig config{};
|
static VulkanFeatureConfig config{};
|
||||||
config.api_minor_version = 1;
|
config.api_minor_version = 1;
|
||||||
config.features_1_0 = detail::get_common_1_0_features();
|
config.features_1_0 = detail::get_common_1_0_features();
|
||||||
|
@ -29,7 +29,7 @@ TEST_CASE("TargetBaseVulkanDesktop", "[VkBootstrap.feature_config]") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy_surface(*instance_ret, surface);
|
vkb::destroy_surface(instance, surface);
|
||||||
vkb::destroy_instance(instance);
|
vkb::destroy_instance(instance);
|
||||||
destroy_window_glfw(window);
|
destroy_window_glfw(window);
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user