Vulkan: Enable timeline semaphores if supported by device

This is needed for a similar change in Chromium to function with
`--enable-features=VulkanFromANGLE`.

Bug: angleproject:8253
Change-Id: I422964ea010c650439dd4797ee8ba7b533f26a87
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4675807
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
This commit is contained in:
Phan Quang Minh
2023-07-12 10:04:10 +02:00
committed by Angle LUCI CQ
parent 2134a9def0
commit 4cab5e94fc
7 changed files with 38 additions and 0 deletions

View File

@@ -81,3 +81,4 @@ Xiaopeng Li
Akihiko Odaki
Ho Cheung
Tao Wang
Phan Quang Minh

View File

@@ -1243,6 +1243,13 @@ struct FeaturesVk : FeatureSetBase
&members, "http://anglebug.com/8229"
};
FeatureInfo supportsTimelineSemaphore = {
"supportsTimelineSemaphore",
FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_timeline_semaphore extension",
&members,
};
};
inline FeaturesVk::FeaturesVk() = default;

View File

@@ -1344,6 +1344,13 @@
"Enable use of VK_KHR_portability_enumeration extension"
],
"issue": "http://anglebug.com/8229"
},
{
"name": "supports_timeline_semaphore",
"category": "Features",
"description": [
"VkDevice supports the VK_KHR_timeline_semaphore extension"
]
}
]
}

View File

@@ -2300,6 +2300,7 @@ void RendererVk::appendDeviceExtensionFeaturesPromotedTo11(
// - VK_KHR_shader_subgroup_extended_types: shaderSubgroupExtendedTypes (feature)
// - VK_EXT_host_query_reset: hostQueryReset (feature)
// - VK_KHR_imageless_framebuffer: imagelessFramebuffer (feature)
// - VK_KHR_timeline_semaphore: timelineSemaphore (feature)
//
// Note that supportedDepthResolveModes is used just to check if the property struct is populated.
// ANGLE always uses VK_RESOLVE_MODE_SAMPLE_ZERO_BIT for both depth and stencil, and support for
@@ -2339,6 +2340,11 @@ void RendererVk::appendDeviceExtensionFeaturesPromotedTo12(
{
vk::AddToPNextChain(deviceFeatures, &mImagelessFramebufferFeatures);
}
if (ExtensionFound(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME, deviceExtensionNames))
{
vk::AddToPNextChain(deviceFeatures, &mTimelineSemaphoreFeatures);
}
}
// The following features and properties used by ANGLE have been promoted to Vulkan 1.3:
@@ -2533,6 +2539,10 @@ void RendererVk::queryDeviceExtensionFeatures(const vk::ExtensionNameList &devic
mDrmProperties = {};
mDrmProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT;
mTimelineSemaphoreFeatures = {};
mTimelineSemaphoreFeatures.sType =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR;
if (!vkGetPhysicalDeviceProperties2KHR || !vkGetPhysicalDeviceFeatures2KHR)
{
return;
@@ -2600,6 +2610,7 @@ void RendererVk::queryDeviceExtensionFeatures(const vk::ExtensionNameList &devic
mSwapchainMaintenance1Features.pNext = nullptr;
mDitheringFeatures.pNext = nullptr;
mDrmProperties.pNext = nullptr;
mTimelineSemaphoreFeatures.pNext = nullptr;
}
// See comment above appendDeviceExtensionFeaturesNotPromoted. Additional extensions are enabled
@@ -3042,6 +3053,12 @@ void RendererVk::enableDeviceExtensionsPromotedTo12(
mEnabledDeviceExtensions.push_back(VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME);
vk::AddToPNextChain(&mEnabledFeatures, &mImagelessFramebufferFeatures);
}
if (mFeatures.supportsTimelineSemaphore.enabled)
{
mEnabledDeviceExtensions.push_back(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME);
vk::AddToPNextChain(&mEnabledFeatures, &mTimelineSemaphoreFeatures);
}
}
// See comment above appendDeviceExtensionFeaturesPromotedTo13.
@@ -4746,6 +4763,9 @@ void RendererVk::initFeatures(DisplayVk *displayVk,
ANGLE_FEATURE_CONDITION(&mFeatures, enablePipelineCacheDataCompression, true);
ANGLE_FEATURE_CONDITION(&mFeatures, supportsTimelineSemaphore,
mTimelineSemaphoreFeatures.timelineSemaphore == VK_TRUE);
ApplyFeatureOverrides(&mFeatures, displayVk->getState());
// Disable memory report feature overrides if extension is not supported.

View File

@@ -923,6 +923,7 @@ class RendererVk : angle::NonCopyable
VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT mSwapchainMaintenance1Features;
VkPhysicalDeviceLegacyDitheringFeaturesEXT mDitheringFeatures;
VkPhysicalDeviceDrmPropertiesEXT mDrmProperties;
VkPhysicalDeviceTimelineSemaphoreFeaturesKHR mTimelineSemaphoreFeatures;
angle::PackedEnumBitSet<gl::ShadingRate, uint8_t> mSupportedFragmentShadingRates;
std::vector<VkQueueFamilyProperties> mQueueFamilyProperties;

View File

@@ -327,6 +327,7 @@ constexpr PackedEnumMap<Feature, const char *> kFeatureNames = {{
{Feature::SupportsSurfaceProtectedCapabilitiesExtension, "supportsSurfaceProtectedCapabilitiesExtension"},
{Feature::SupportsSurfaceProtectedSwapchains, "supportsSurfaceProtectedSwapchains"},
{Feature::SupportsSwapchainMaintenance1, "supportsSwapchainMaintenance1"},
{Feature::SupportsTimelineSemaphore, "supportsTimelineSemaphore"},
{Feature::SupportsTimestampSurfaceAttribute, "supportsTimestampSurfaceAttribute"},
{Feature::SupportsTransformFeedbackExtension, "supportsTransformFeedbackExtension"},
{Feature::SupportsVertexInputDynamicState, "supportsVertexInputDynamicState"},

View File

@@ -327,6 +327,7 @@ enum class Feature
SupportsSurfaceProtectedCapabilitiesExtension,
SupportsSurfaceProtectedSwapchains,
SupportsSwapchainMaintenance1,
SupportsTimelineSemaphore,
SupportsTimestampSurfaceAttribute,
SupportsTransformFeedbackExtension,
SupportsVertexInputDynamicState,