0

Move drm vulkan usage from extension to core.

The extension "VK_KHR_external_fence_capabilities" has been moved into
core but implementations might not exist as an alias without the
extension being enabled.

By moving to core we avoid this potential issue that arises when using
the flag 'VulkanFromAngle' which does not respect the
'required_extensions' parameters.

Low-Coverage-Reason: HARD_TO_TEST
Bug: b/317209177
Change-Id: Ifb953f754acb41fb2bc6c61ac7b948271be5d7e0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5190327
Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org>
Commit-Queue: Peter McNeeley <petermcneeley@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1246501}
This commit is contained in:
Peter McNeeley
2024-01-12 17:06:28 +00:00
committed by Chromium LUCI CQ
parent 23adc37753
commit b74c20456e
2 changed files with 11 additions and 12 deletions

@ -26,26 +26,25 @@ bool VulkanImplementationGbm::InitializeVulkanInstance(bool using_surface) {
DLOG_IF(ERROR, using_surface) << "VK_KHR_surface is not supported.";
std::vector<const char*> required_extensions = {
"VK_KHR_external_fence_capabilities",
"VK_KHR_get_physical_device_properties2",
};
if (!vulkan_instance_.Initialize(base::FilePath("libvulkan.so.1"),
required_extensions, {})) {
return false;
}
vkGetPhysicalDeviceExternalFencePropertiesKHR_ =
reinterpret_cast<PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR>(
vkGetInstanceProcAddr(
vulkan_instance_.vk_instance(),
"vkGetPhysicalDeviceExternalFencePropertiesKHR"));
if (!vkGetPhysicalDeviceExternalFencePropertiesKHR_)
vkGetPhysicalDeviceExternalFenceProperties_ =
reinterpret_cast<PFN_vkGetPhysicalDeviceExternalFenceProperties>(
vkGetInstanceProcAddr(vulkan_instance_.vk_instance(),
"vkGetPhysicalDeviceExternalFenceProperties"));
if (!vkGetPhysicalDeviceExternalFenceProperties_) {
return false;
}
vkGetFenceFdKHR_ = reinterpret_cast<PFN_vkGetFenceFdKHR>(
vkGetInstanceProcAddr(vulkan_instance_.vk_instance(), "vkGetFenceFdKHR"));
if (!vkGetFenceFdKHR_)
if (!vkGetFenceFdKHR_) {
return false;
}
return true;
}
@ -67,7 +66,7 @@ bool VulkanImplementationGbm::GetPhysicalDevicePresentationSupport(
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO,
.handleType = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT};
VkExternalFenceProperties external_fence_properties;
vkGetPhysicalDeviceExternalFencePropertiesKHR_(
vkGetPhysicalDeviceExternalFenceProperties_(
physical_device, &external_fence_info, &external_fence_properties);
if (!(external_fence_properties.externalFenceFeatures &
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT)) {

@ -51,8 +51,8 @@ class VulkanImplementationGbm : public gpu::VulkanImplementation {
private:
gpu::VulkanInstance vulkan_instance_;
PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR
vkGetPhysicalDeviceExternalFencePropertiesKHR_ = nullptr;
PFN_vkGetPhysicalDeviceExternalFenceProperties
vkGetPhysicalDeviceExternalFenceProperties_ = nullptr;
PFN_vkGetFenceFdKHR vkGetFenceFdKHR_ = nullptr;
};