mirror of
https://github.com/godotengine/godot-angle-static.git
synced 2026-01-03 14:09:33 +03:00
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:
committed by
Angle LUCI CQ
parent
2134a9def0
commit
4cab5e94fc
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -327,6 +327,7 @@ enum class Feature
|
||||
SupportsSurfaceProtectedCapabilitiesExtension,
|
||||
SupportsSurfaceProtectedSwapchains,
|
||||
SupportsSwapchainMaintenance1,
|
||||
SupportsTimelineSemaphore,
|
||||
SupportsTimestampSurfaceAttribute,
|
||||
SupportsTransformFeedbackExtension,
|
||||
SupportsVertexInputDynamicState,
|
||||
|
||||
Reference in New Issue
Block a user