Commit f9a00aac authored by Peng Huang's avatar Peng Huang Committed by Commit Bot

VulkanPhysicalDeviceInfo: add device extensions.

Bug: none
Change-Id: I09d906ed6d642e7a819b75d5b36715c5677387e9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2010181Reviewed-by: default avatarVasiliy Telezhnikov <vasilyt@chromium.org>
Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#733450}
parent 1048d1d9
...@@ -26,6 +26,7 @@ class GPU_EXPORT VulkanPhysicalDeviceInfo { ...@@ -26,6 +26,7 @@ class GPU_EXPORT VulkanPhysicalDeviceInfo {
VkPhysicalDevice device = VK_NULL_HANDLE; VkPhysicalDevice device = VK_NULL_HANDLE;
VkPhysicalDeviceProperties properties = {}; VkPhysicalDeviceProperties properties = {};
std::vector<VkExtensionProperties> extensions;
std::vector<VkLayerProperties> layers; std::vector<VkLayerProperties> layers;
VkPhysicalDeviceFeatures features = {}; VkPhysicalDeviceFeatures features = {};
......
...@@ -9,6 +9,7 @@ import "gpu/ipc/common/vulkan_types.mojom"; ...@@ -9,6 +9,7 @@ import "gpu/ipc/common/vulkan_types.mojom";
struct VulkanPhysicalDeviceInfo { struct VulkanPhysicalDeviceInfo {
VkPhysicalDeviceProperties properties; VkPhysicalDeviceProperties properties;
array<VkExtensionProperties> extensions;
array<VkLayerProperties> layers; array<VkLayerProperties> layers;
VkPhysicalDeviceFeatures features; VkPhysicalDeviceFeatures features;
bool feature_sampler_ycbcr_conversion; bool feature_sampler_ycbcr_conversion;
......
...@@ -21,6 +21,11 @@ struct StructTraits<gpu::mojom::VulkanPhysicalDeviceInfoDataView, ...@@ -21,6 +21,11 @@ struct StructTraits<gpu::mojom::VulkanPhysicalDeviceInfoDataView,
return input.properties; return input.properties;
} }
static const std::vector<VkExtensionProperties>& extensions(
const gpu::VulkanPhysicalDeviceInfo& input) {
return input.extensions;
}
static const std::vector<VkLayerProperties>& layers( static const std::vector<VkLayerProperties>& layers(
const gpu::VulkanPhysicalDeviceInfo& input) { const gpu::VulkanPhysicalDeviceInfo& input) {
return input.layers; return input.layers;
...@@ -50,6 +55,8 @@ struct StructTraits<gpu::mojom::VulkanPhysicalDeviceInfoDataView, ...@@ -50,6 +55,8 @@ struct StructTraits<gpu::mojom::VulkanPhysicalDeviceInfoDataView,
gpu::VulkanPhysicalDeviceInfo* out) { gpu::VulkanPhysicalDeviceInfo* out) {
if (!data.ReadProperties(&out->properties)) if (!data.ReadProperties(&out->properties))
return false; return false;
if (!data.ReadExtensions(&out->extensions))
return false;
if (!data.ReadLayers(&out->layers)) if (!data.ReadLayers(&out->layers))
return false; return false;
if (!data.ReadFeatures(&out->features)) if (!data.ReadFeatures(&out->features))
......
...@@ -30,6 +30,7 @@ VULKAN_INSTANCE_FUNCTIONS = [ ...@@ -30,6 +30,7 @@ VULKAN_INSTANCE_FUNCTIONS = [
'functions': [ 'functions': [
'vkCreateDevice', 'vkCreateDevice',
'vkDestroyInstance', 'vkDestroyInstance',
'vkEnumerateDeviceExtensionProperties',
'vkEnumerateDeviceLayerProperties', 'vkEnumerateDeviceLayerProperties',
'vkEnumeratePhysicalDevices', 'vkEnumeratePhysicalDevices',
'vkGetDeviceProcAddr', 'vkGetDeviceProcAddr',
......
...@@ -88,6 +88,16 @@ bool VulkanFunctionPointers::BindInstanceFunctionPointers( ...@@ -88,6 +88,16 @@ bool VulkanFunctionPointers::BindInstanceFunctionPointers(
return false; return false;
} }
vkEnumerateDeviceExtensionPropertiesFn =
reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(
vkGetInstanceProcAddrFn(vk_instance,
"vkEnumerateDeviceExtensionProperties"));
if (!vkEnumerateDeviceExtensionPropertiesFn) {
DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
<< "vkEnumerateDeviceExtensionProperties";
return false;
}
vkEnumerateDeviceLayerPropertiesFn = vkEnumerateDeviceLayerPropertiesFn =
reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>( reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(
vkGetInstanceProcAddrFn(vk_instance, vkGetInstanceProcAddrFn(vk_instance,
......
...@@ -73,6 +73,8 @@ struct VulkanFunctionPointers { ...@@ -73,6 +73,8 @@ struct VulkanFunctionPointers {
// Instance functions // Instance functions
PFN_vkCreateDevice vkCreateDeviceFn = nullptr; PFN_vkCreateDevice vkCreateDeviceFn = nullptr;
PFN_vkDestroyInstance vkDestroyInstanceFn = nullptr; PFN_vkDestroyInstance vkDestroyInstanceFn = nullptr;
PFN_vkEnumerateDeviceExtensionProperties
vkEnumerateDeviceExtensionPropertiesFn = nullptr;
PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerPropertiesFn = PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerPropertiesFn =
nullptr; nullptr;
PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevicesFn = nullptr; PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevicesFn = nullptr;
...@@ -228,6 +230,8 @@ struct VulkanFunctionPointers { ...@@ -228,6 +230,8 @@ struct VulkanFunctionPointers {
// Instance functions // Instance functions
#define vkCreateDevice gpu::GetVulkanFunctionPointers()->vkCreateDeviceFn #define vkCreateDevice gpu::GetVulkanFunctionPointers()->vkCreateDeviceFn
#define vkDestroyInstance gpu::GetVulkanFunctionPointers()->vkDestroyInstanceFn #define vkDestroyInstance gpu::GetVulkanFunctionPointers()->vkDestroyInstanceFn
#define vkEnumerateDeviceExtensionProperties \
gpu::GetVulkanFunctionPointers()->vkEnumerateDeviceExtensionPropertiesFn
#define vkEnumerateDeviceLayerProperties \ #define vkEnumerateDeviceLayerProperties \
gpu::GetVulkanFunctionPointers()->vkEnumerateDeviceLayerPropertiesFn gpu::GetVulkanFunctionPointers()->vkEnumerateDeviceLayerPropertiesFn
#define vkEnumeratePhysicalDevices \ #define vkEnumeratePhysicalDevices \
......
...@@ -272,6 +272,18 @@ void VulkanInstance::CollectInfo() { ...@@ -272,6 +272,18 @@ void VulkanInstance::CollectInfo() {
vkGetPhysicalDeviceProperties(device, &info.properties); vkGetPhysicalDeviceProperties(device, &info.properties);
count = 0;
result = vkEnumerateDeviceExtensionProperties(
device, nullptr /* pLayerName */, &count, nullptr);
DLOG_IF(ERROR, result != VK_SUCCESS)
<< "vkEnumerateDeviceExtensionProperties failed: " << result;
info.extensions.resize(count);
result = vkEnumerateDeviceExtensionProperties(
device, nullptr /* pLayerName */, &count, info.extensions.data());
DLOG_IF(ERROR, result != VK_SUCCESS)
<< "vkEnumerateDeviceExtensionProperties failed: " << result;
count = 0; count = 0;
result = vkEnumerateDeviceLayerProperties(device, &count, nullptr); result = vkEnumerateDeviceLayerProperties(device, &count, nullptr);
DLOG_IF(ERROR, result != VK_SUCCESS) DLOG_IF(ERROR, result != VK_SUCCESS)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment