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

View File

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