Renamed allow_fallback_gpu_type to allow_any_type and refactored implementation to be simpler

This commit is contained in:
Charles Giessen 2020-03-07 15:44:47 -07:00
parent 8a18c5a7ba
commit 6043129631
2 changed files with 15 additions and 13 deletions

View File

@ -674,13 +674,8 @@ PhysicalDeviceSelector::Suitable PhysicalDeviceSelector::is_device_suitable (Phy
}
if (criteria.require_present && !swapChainAdequate) suitable = Suitable::no;
if ((criteria.preferred_type == PreferredDeviceType::discrete &&
pd.device_properties.deviceType != VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) ||
(criteria.preferred_type == PreferredDeviceType::integrated &&
pd.device_properties.deviceType != VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) ||
(criteria.preferred_type == PreferredDeviceType::virtual_gpu &&
pd.device_properties.deviceType != VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU)) {
if (criteria.allow_fallback)
if (pd.device_properties.deviceType != static_cast<VkPhysicalDeviceType> (criteria.preferred_type)) {
if (criteria.allow_any_type)
suitable = Suitable::partial;
else
suitable = Suitable::no;
@ -778,8 +773,8 @@ PhysicalDeviceSelector& PhysicalDeviceSelector::prefer_gpu_device_type (Preferre
criteria.preferred_type = type;
return *this;
}
PhysicalDeviceSelector& PhysicalDeviceSelector::allow_fallback_gpu_type (bool fallback) {
criteria.allow_fallback = fallback;
PhysicalDeviceSelector& PhysicalDeviceSelector::allow_any_gpu_device_type (bool allow_any_type) {
criteria.allow_any_type = allow_any_type;
return *this;
}
PhysicalDeviceSelector& PhysicalDeviceSelector::require_present (bool require) {

View File

@ -280,7 +280,14 @@ struct PhysicalDevice {
friend class DeviceBuilder;
};
enum class PreferredDeviceType { discrete, integrated, virtual_gpu, cpu, dont_care };
enum class PreferredDeviceType {
other = 0,
integrated = 1,
discrete = 2,
virtual_gpu = 3,
cpu = 4
};
class PhysicalDeviceSelector {
public:
// Requires a vkb::Instance to construct, needed to pass instance creation info.
@ -292,8 +299,8 @@ class PhysicalDeviceSelector {
PhysicalDeviceSelector& set_surface (VkSurfaceKHR instance);
// Set the desired physical device type to select. Defaults to PreferredDeviceType::discrete.
PhysicalDeviceSelector& prefer_gpu_device_type (PreferredDeviceType type = PreferredDeviceType::discrete);
// Allow fallback to a device type that isn't the preferred physical device type. Defaults to true.
PhysicalDeviceSelector& allow_fallback_gpu_type (bool fallback = true);
// Allow selection of a gpu device type that isn't the preferred physical device type. Defaults to true.
PhysicalDeviceSelector& allow_any_gpu_device_type (bool allow_any_type = true);
// Require that a physical device supports presentation. Defaults to true.
PhysicalDeviceSelector& require_present (bool require = true);
@ -352,7 +359,7 @@ class PhysicalDeviceSelector {
struct SelectionCriteria {
PreferredDeviceType preferred_type = PreferredDeviceType::discrete;
bool allow_fallback = true;
bool allow_any_type = true;
bool require_present = true;
bool require_dedicated_transfer_queue = false;
bool require_dedicated_compute_queue = false;