mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-11 01:08:39 +12:00
vk: Fix cyclic dependency problem during physical device init
This commit is contained in:
parent
4177dd03c0
commit
470b8a2cac
2 changed files with 81 additions and 55 deletions
|
@ -158,13 +158,46 @@ namespace vk
|
|||
}
|
||||
}
|
||||
|
||||
void physical_device::get_physical_device_properties(bool allow_extensions)
|
||||
void physical_device::get_physical_device_properties_0(bool allow_extensions)
|
||||
{
|
||||
// Core properties only
|
||||
vkGetPhysicalDeviceMemoryProperties(dev, &memory_properties);
|
||||
vkGetPhysicalDeviceProperties(dev, &props);
|
||||
|
||||
if (!allow_extensions)
|
||||
{
|
||||
vkGetPhysicalDeviceProperties(dev, &props);
|
||||
return;
|
||||
}
|
||||
|
||||
// Try to query driver properties if possible
|
||||
supported_extensions instance_extensions(supported_extensions::instance);
|
||||
supported_extensions device_extensions(supported_extensions::device, nullptr, dev);
|
||||
|
||||
if (!instance_extensions.is_supported(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME) ||
|
||||
!device_extensions.is_supported(VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
VkPhysicalDeviceProperties2KHR properties2;
|
||||
properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR;
|
||||
properties2.pNext = nullptr;
|
||||
|
||||
driver_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR;
|
||||
driver_properties.pNext = properties2.pNext;
|
||||
properties2.pNext = &driver_properties;
|
||||
|
||||
auto _vkGetPhysicalDeviceProperties2KHR = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2KHR>(vkGetInstanceProcAddr(parent, "vkGetPhysicalDeviceProperties2KHR"));
|
||||
ensure(_vkGetPhysicalDeviceProperties2KHR);
|
||||
|
||||
_vkGetPhysicalDeviceProperties2KHR(dev, &properties2);
|
||||
}
|
||||
|
||||
void physical_device::get_physical_device_properties_1(bool allow_extensions)
|
||||
{
|
||||
// Extended properties. Call after checking for features
|
||||
if (!allow_extensions)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -173,10 +206,9 @@ namespace vk
|
|||
|
||||
if (!instance_extensions.is_supported(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME))
|
||||
{
|
||||
vkGetPhysicalDeviceProperties(dev, &props);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
VkPhysicalDeviceProperties2KHR properties2;
|
||||
properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR;
|
||||
properties2.pNext = nullptr;
|
||||
|
@ -198,13 +230,6 @@ namespace vk
|
|||
properties2.pNext = &multidraw_props;
|
||||
}
|
||||
|
||||
if (device_extensions.is_supported(VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME))
|
||||
{
|
||||
driver_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR;
|
||||
driver_properties.pNext = properties2.pNext;
|
||||
properties2.pNext = &driver_properties;
|
||||
}
|
||||
|
||||
auto _vkGetPhysicalDeviceProperties2KHR = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2KHR>(vkGetInstanceProcAddr(parent, "vkGetPhysicalDeviceProperties2KHR"));
|
||||
ensure(_vkGetPhysicalDeviceProperties2KHR);
|
||||
|
||||
|
@ -236,15 +261,15 @@ namespace vk
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void physical_device::create(VkInstance context, VkPhysicalDevice pdev, bool allow_extensions)
|
||||
{
|
||||
dev = pdev;
|
||||
parent = context;
|
||||
|
||||
get_physical_device_properties_0(allow_extensions);
|
||||
get_physical_device_features(allow_extensions);
|
||||
get_physical_device_properties(allow_extensions);
|
||||
get_physical_device_properties_1(allow_extensions);
|
||||
|
||||
rsx_log.always()("Found Vulkan-compatible GPU: '%s' running on driver %s", get_name(), get_driver_version());
|
||||
|
||||
|
|
|
@ -106,7 +106,8 @@ namespace vk
|
|||
friend class render_device;
|
||||
private:
|
||||
void get_physical_device_features(bool allow_extensions);
|
||||
void get_physical_device_properties(bool allow_extensions);
|
||||
void get_physical_device_properties_0(bool allow_extensions);
|
||||
void get_physical_device_properties_1(bool allow_extensions);
|
||||
|
||||
public:
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue