Hi,
I’m not sure the command line argument will work in a packaged build, do you see different results if you specify the CustomConfig file in your Target.cs file? That might not be helpful if you’re looking to set the profile at launch, but it’ll help narrow down the issue. The other possibility is that something further down the config hierarchy is clobbering the values, here’s the order things are processed from top to bottom (so later values will override earlier ones):
inline FConfigLayer GConfigLayers[] =
{
/**************************************************
**** CRITICAL NOTES
**** If you change this array, you need to also change EnumerateConfigFileLocations() in ConfigHierarchy.cs!!!
**** And maybe UObject::GetDefaultConfigFilename(), UObject::GetGlobalUserConfigFilename()
**************************************************/
// Engine/Base.ini
{ TEXT("AbsoluteBase"), TEXT("{ENGINE}/Config/Base.ini"), EConfigLayerFlags::NoExpand},
// Engine/Base*.ini
{ TEXT("Base"), TEXT("{ENGINE}/Config/Base{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
// Engine/Platform/BasePlatform*.ini
{ TEXT("BasePlatform"), TEXT("{ENGINE}/Config/{PLATFORM}/Base{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
// Project/Default*.ini
{ TEXT("ProjectDefault"), TEXT("{PROJECT}/Config/Default{TYPE}.ini"), EConfigLayerFlags::AllowCommandLineOverride | EConfigLayerFlags::UseGlobalConfigCache },
// Project/Generated*.ini Reserved for files generated by build process and should never be checked in
{ TEXT("ProjectGenerated"), TEXT("{PROJECT}/Config/Generated{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
// Project/Custom/CustomConfig/Default*.ini only if CustomConfig is defined
{ TEXT("CustomConfig"), TEXT("{PROJECT}/Config/Custom/{CUSTOMCONFIG}/Default{TYPE}.ini"), EConfigLayerFlags::RequiresCustomConfig | EConfigLayerFlags::UseGlobalConfigCache },
// Engine/Platform/Platform*.ini
{ TEXT("EnginePlatform"), TEXT("{ENGINE}/Config/{PLATFORM}/{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
// Project/Platform/Platform*.ini
{ TEXT("ProjectPlatform"), TEXT("{PROJECT}/Config/{PLATFORM}/{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
// Project/Platform/GeneratedPlatform*.ini Reserved for files generated by build process and should never be checked in
{ TEXT("ProjectPlatformGenerated"), TEXT("{PROJECT}/Config/{PLATFORM}/Generated{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
// Project/Platform/Custom/CustomConfig/Platform*.ini only if CustomConfig is defined
{ TEXT("CustomConfigPlatform"), TEXT("{PROJECT}/Config/{PLATFORM}/Custom/{CUSTOMCONFIG}/{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::RequiresCustomConfig| EConfigLayerFlags::UseGlobalConfigCache },
// AppSettings/.../System*.ini
{ TEXT("AppSettingsDir"), TEXT("{APPSETTINGS}Unreal Engine/Engine/Config/System{TYPE}.ini"), EConfigLayerFlags::NoExpand },
// UserSettings/.../User*.ini
{ TEXT("UserSettingsDir"), TEXT("{USERSETTINGS}Unreal Engine/Engine/Config/User{TYPE}.ini"), EConfigLayerFlags::NoExpand },
// UserDir/.../User*.ini
{ TEXT("UserDir"), TEXT("{USER}Unreal Engine/Engine/Config/User{TYPE}.ini"), EConfigLayerFlags::NoExpand },
// Project/User*.ini
{ TEXT("GameDirUser"), TEXT("{PROJECT}/Config/User{TYPE}.ini"), EConfigLayerFlags::NoExpand },
};
Assuming both of your device profile configs are at the project level I don’t think there should be any issues here, so the final collated config (assuming the CustomConfig is actually being picked up) should have everything.
For what it’s worth, custom configs are a bit of a hack; the preference here is usually to keep all of the device profiles in one place (Config/DefaultDeviceProfiles.ini) and switch between them at runtime. We also don’t typically make multiple profiles for desktop platforms since there are countless hardware permutations. Instead, we’ll either auto-detect (see ULyraSettingsLocal::RunAutoBenchmark for an example) or expose settings for adjusting scalability groups manually.
Best,
Cody
[Attachment Removed]