From 79dea539c40729a5d148479efb93e89f750529dd Mon Sep 17 00:00:00 2001 From: rgba16f <82187279+rgba16f@users.noreply.github.com> Date: Mon, 26 Jul 2021 13:28:54 -0500 Subject: [PATCH] Allow user to specify a partial gpu name to the forceAdaptor command line argument Signed-off-by: rgba16f <82187279+rgba16f@users.noreply.github.com> --- Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp | 16 +++++++++++----- .../Source/RPI.Private/RPISystemComponent.cpp | 1 + .../RPI/Code/Source/RPI.Public/RPISystem.cpp | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp b/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp index ad3ab119ef..bf29efc644 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp @@ -18,6 +18,7 @@ #include #include #include +#include AZ_DEFINE_BUDGET(RHI); @@ -101,6 +102,8 @@ namespace AZ } AZStd::string preferredUserAdapterName = RHI::GetCommandLineValue("forceAdapter"); + AZStd::to_lower(preferredUserAdapterName.begin(), preferredUserAdapterName.end()); + bool findPreferredUserDevice = preferredUserAdapterName.size() > 0; RHI::PhysicalDevice* preferredUserDevice{}; RHI::PhysicalDevice* preferredVendorDevice{}; @@ -110,12 +113,15 @@ namespace AZ const RHI::PhysicalDeviceDescriptor& descriptor = physicalDevice->GetDescriptor(); AZ_Printf("RHISystem", "\tEnumerated physical device: %s\n", descriptor.m_description.c_str()); - - if (!preferredUserDevice && descriptor.m_description == preferredUserAdapterName) + if (findPreferredUserDevice) { - preferredUserDevice = physicalDevice.get(); + AZStd::string descriptorLowerCase = descriptor.m_description; + AZStd::to_lower( descriptorLowerCase.begin(), descriptorLowerCase.end()); + if (!preferredUserDevice && descriptorLowerCase.contains(preferredUserAdapterName)) + { + preferredUserDevice = physicalDevice.get(); + } } - // Record the first nVidia or AMD device we find. if (!preferredVendorDevice && (descriptor.m_vendorId == RHI::VendorId::AMD || descriptor.m_vendorId == RHI::VendorId::nVidia)) { @@ -123,7 +129,7 @@ namespace AZ } } - AZ_Warning("RHISystem", preferredUserAdapterName.empty() || preferredUserDevice, "Specified adapter name not found: '%s'", preferredUserAdapterName.c_str()); + AZ_Warning("RHI", preferredUserAdapterName.empty() || preferredUserDevice, "Specified adapter name not found: '%s'", preferredUserAdapterName.c_str()); RHI::PhysicalDevice* physicalDeviceFound{}; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.cpp b/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.cpp index 2567d221e5..8c78ff0e73 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Private/RPISystemComponent.cpp @@ -56,6 +56,7 @@ namespace AZ void RPISystemComponent::GetRequiredServices(ComponentDescriptor::DependencyArrayType& required) { required.push_back(RHI::Factory::GetComponentService()); + required.push_back(AZ_CRC_CE("LoggerService")); } void RPISystemComponent::GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/RPISystem.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/RPISystem.cpp index 5df1c655d6..5e57ba4e00 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/RPISystem.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/RPISystem.cpp @@ -79,6 +79,7 @@ namespace AZ void RPISystem::Initialize(const RPISystemDescriptor& rpiSystemDescriptor) { + AZ_Printf("RHI", "RPISystem Initialize\n"); m_rhiSystem.InitDevice(); // Gather asset handlers from sub-systems.