r.DisableEngineAndAppRegistration
r.DisableEngineAndAppRegistration
#Overview
name: r.DisableEngineAndAppRegistration
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
If true, disables engine and app registration, to disable GPU driver optimizations during debugging and development\nChanges will only take effect in new game/editor instances - can\'t be changed at runtime.\n
It is referenced in 12
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of r.DisableEngineAndAppRegistration is to disable engine and application registration with GPU drivers, which prevents driver-specific optimizations during debugging and development.
This setting variable is primarily used in the rendering subsystem of Unreal Engine, specifically in the RHI (Rendering Hardware Interface) module and various graphics API implementations such as D3D11, D3D12, and Vulkan.
The value of this variable is set through a console command, as it’s defined as a TAutoConsoleVariable. It can be changed at runtime, but the changes only take effect in new game or editor instances.
Several other variables interact with r.DisableEngineAndAppRegistration:
- r.ShaderDevelopmentMode: When this is enabled, it also triggers the disabling of engine registration.
- FApp::HasProjectName(): This is used in conjunction with r.DisableEngineAndAppRegistration to determine if app registration should be disabled.
Developers should be aware that:
- Disabling engine and app registration can affect performance, as it prevents GPU driver optimizations.
- This setting is particularly useful during debugging and development to ensure consistent behavior across different hardware configurations.
- Changes to this variable only take effect in new instances of the game or editor.
Best practices when using this variable include:
- Enable it during debugging sessions or when investigating hardware-specific issues.
- Disable it for release builds to allow for optimal performance.
- Be aware of its interaction with r.ShaderDevelopmentMode.
Regarding the associated variable CVarDisableEngineAndAppRegistration:
This is the actual console variable object that stores the value of r.DisableEngineAndAppRegistration. It’s used throughout the codebase to check the current state of the setting. The purpose and usage are identical to r.DisableEngineAndAppRegistration, as it’s the implementation detail of how the console variable is accessed in the code.
Developers should use IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT(“r.DisableEngineAndAppRegistration”)) to access this variable’s value in C++ code. The value is typically checked using GetValueOnAnyThread() to determine if engine and app registration should be disabled.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/RHI/Private/RHI.cpp:50
Scope: file
Source code excerpt:
static TAutoConsoleVariable<int32> CVarDisableEngineAndAppRegistration(
TEXT("r.DisableEngineAndAppRegistration"),
0,
TEXT("If true, disables engine and app registration, to disable GPU driver optimizations during debugging and development\n")
TEXT("Changes will only take effect in new game/editor instances - can't be changed at runtime.\n"),
ECVF_Default);
static TAutoConsoleVariable<int32> CVarGraphicsAdapter(
#Loc: <Workspace>/Engine/Plugins/Runtime/OpenXR/Source/OpenXRHMD/Private/OpenXRHMDModule.cpp:761
Scope (from outer to inner):
file
function bool FOpenXRHMDModule::InitInstance
Source code excerpt:
// Engine registration can be disabled via console var.
auto* CVarDisableEngineAndAppRegistration = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DisableEngineAndAppRegistration"));
bool bDisableEngineRegistration = (CVarDisableEngineAndAppRegistration && CVarDisableEngineAndAppRegistration->GetValueOnAnyThread() != 0);
// EngineName will be of the form "UnrealEngine4.21", with the minor version ("21" in this example)
// updated with every quarterly release
FString EngineName = bDisableEngineRegistration ? FString("") : FApp::GetEpicProductIdentifier() + FEngineVersion::Current().ToString(EVersionComponent::Minor);
FString AppName = bDisableEngineRegistration ? FString("") : FApp::GetProjectName();
#Loc: <Workspace>/Engine/Source/Runtime/D3D12RHI/Private/D3D12Adapter.cpp:555
Scope (from outer to inner):
file
function void FD3D12Adapter::CreateRootDevice
Source code excerpt:
{
auto* CVarShaderDevelopmentMode = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.ShaderDevelopmentMode"));
auto* CVarDisableEngineAndAppRegistration = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DisableEngineAndAppRegistration"));
const bool bDisableEngineRegistration = (CVarShaderDevelopmentMode && CVarShaderDevelopmentMode->GetValueOnAnyThread() != 0) ||
(CVarDisableEngineAndAppRegistration && CVarDisableEngineAndAppRegistration->GetValueOnAnyThread() != 0);
const bool bDisableAppRegistration = bDisableEngineRegistration || !FApp::HasProjectName();
// Creating the Direct3D device with AGS registration and extensions.
#Loc: <Workspace>/Engine/Source/Runtime/D3D12RHI/Private/Windows/WindowsD3D12Device.cpp:243
Scope (from outer to inner):
file
function static INTCExtensionAppInfo1 GetIntelApplicationInfo
Source code excerpt:
{
// CVar set to disable workload registration
static TConsoleVariableData<int32>* CVarDisableEngineAndAppRegistration = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DisableEngineAndAppRegistration"));
INTCExtensionAppInfo1 AppInfo{};
if (!(CVarDisableEngineAndAppRegistration && CVarDisableEngineAndAppRegistration->GetValueOnAnyThread() != 0))
{
AppInfo.pApplicationName = FApp::HasProjectName() ? FApp::GetProjectName() : TEXT("");
#Loc: <Workspace>/Engine/Source/Runtime/VulkanRHI/Private/VulkanRHI.cpp:674
Scope (from outer to inner):
file
function void FVulkanDynamicRHI::CreateInstance
Source code excerpt:
// Engine registration can be disabled via console var. Also disable automatically if ShaderDevelopmentMode is on.
auto* CVarShaderDevelopmentMode = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.ShaderDevelopmentMode"));
auto* CVarDisableEngineAndAppRegistration = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DisableEngineAndAppRegistration"));
bool bDisableEngineRegistration = (CVarDisableEngineAndAppRegistration && CVarDisableEngineAndAppRegistration->GetValueOnAnyThread() != 0) ||
(CVarShaderDevelopmentMode && CVarShaderDevelopmentMode->GetValueOnAnyThread() != 0);
// Use the API version stored in the profile
ApiVersion = GetVulkanApiVersionForFeatureLevel(GMaxRHIFeatureLevel, false);
#Loc: <Workspace>/Engine/Source/Runtime/Windows/D3D11RHI/Private/Windows/WindowsD3D11Device.cpp:1823
Scope (from outer to inner):
file
function void FD3D11DynamicRHI::InitD3DDevice
Source code excerpt:
// Engine registration can be disabled via console var. Also disable automatically if ShaderDevelopmentMode is on.
auto* CVarShaderDevelopmentMode = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.ShaderDevelopmentMode"));
auto* CVarDisableEngineAndAppRegistration = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DisableEngineAndAppRegistration"));
const bool bDisableEngineRegistration = (CVarShaderDevelopmentMode && CVarShaderDevelopmentMode->GetValueOnAnyThread() != 0) ||
(CVarDisableEngineAndAppRegistration && CVarDisableEngineAndAppRegistration->GetValueOnAnyThread() != 0);
const bool bDisableAppRegistration = bDisableEngineRegistration || !FApp::HasProjectName();
AGSDX11ExtensionParams AmdExtensionParams;
FMemory::Memzero(&AmdExtensionParams, sizeof(AmdExtensionParams));
#Associated Variable and Callsites
This variable is associated with another variable named CVarDisableEngineAndAppRegistration
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Plugins/Runtime/OpenXR/Source/OpenXRHMD/Private/OpenXRHMDModule.cpp:761
Scope (from outer to inner):
file
function bool FOpenXRHMDModule::InitInstance
Source code excerpt:
// Engine registration can be disabled via console var.
auto* CVarDisableEngineAndAppRegistration = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DisableEngineAndAppRegistration"));
bool bDisableEngineRegistration = (CVarDisableEngineAndAppRegistration && CVarDisableEngineAndAppRegistration->GetValueOnAnyThread() != 0);
// EngineName will be of the form "UnrealEngine4.21", with the minor version ("21" in this example)
// updated with every quarterly release
FString EngineName = bDisableEngineRegistration ? FString("") : FApp::GetEpicProductIdentifier() + FEngineVersion::Current().ToString(EVersionComponent::Minor);
FString AppName = bDisableEngineRegistration ? FString("") : FApp::GetProjectName();
#Loc: <Workspace>/Engine/Source/Runtime/D3D12RHI/Private/D3D12Adapter.cpp:555
Scope (from outer to inner):
file
function void FD3D12Adapter::CreateRootDevice
Source code excerpt:
{
auto* CVarShaderDevelopmentMode = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.ShaderDevelopmentMode"));
auto* CVarDisableEngineAndAppRegistration = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DisableEngineAndAppRegistration"));
const bool bDisableEngineRegistration = (CVarShaderDevelopmentMode && CVarShaderDevelopmentMode->GetValueOnAnyThread() != 0) ||
(CVarDisableEngineAndAppRegistration && CVarDisableEngineAndAppRegistration->GetValueOnAnyThread() != 0);
const bool bDisableAppRegistration = bDisableEngineRegistration || !FApp::HasProjectName();
// Creating the Direct3D device with AGS registration and extensions.
AGSDX12DeviceCreationParams AmdDeviceCreationParams = {
GetAdapter(), // IDXGIAdapter* pAdapter;
__uuidof(**(RootDevice.GetInitReference())), // IID iid;
#Loc: <Workspace>/Engine/Source/Runtime/D3D12RHI/Private/Windows/WindowsD3D12Device.cpp:243
Scope (from outer to inner):
file
function static INTCExtensionAppInfo1 GetIntelApplicationInfo
Source code excerpt:
{
// CVar set to disable workload registration
static TConsoleVariableData<int32>* CVarDisableEngineAndAppRegistration = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DisableEngineAndAppRegistration"));
INTCExtensionAppInfo1 AppInfo{};
if (!(CVarDisableEngineAndAppRegistration && CVarDisableEngineAndAppRegistration->GetValueOnAnyThread() != 0))
{
AppInfo.pApplicationName = FApp::HasProjectName() ? FApp::GetProjectName() : TEXT("");
//AppInfo.ApplicationVersion = FApp::GetBuildVersion(); // Currently no support for version
AppInfo.pEngineName = TEXT("Unreal Engine");
AppInfo.EngineVersion.major = FEngineVersion::Current().GetMajor();
#Loc: <Workspace>/Engine/Source/Runtime/RHI/Private/RHI.cpp:49
Scope: file
Source code excerpt:
#endif
static TAutoConsoleVariable<int32> CVarDisableEngineAndAppRegistration(
TEXT("r.DisableEngineAndAppRegistration"),
0,
TEXT("If true, disables engine and app registration, to disable GPU driver optimizations during debugging and development\n")
TEXT("Changes will only take effect in new game/editor instances - can't be changed at runtime.\n"),
ECVF_Default);
#Loc: <Workspace>/Engine/Source/Runtime/VulkanRHI/Private/VulkanRHI.cpp:674
Scope (from outer to inner):
file
function void FVulkanDynamicRHI::CreateInstance
Source code excerpt:
// Engine registration can be disabled via console var. Also disable automatically if ShaderDevelopmentMode is on.
auto* CVarShaderDevelopmentMode = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.ShaderDevelopmentMode"));
auto* CVarDisableEngineAndAppRegistration = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DisableEngineAndAppRegistration"));
bool bDisableEngineRegistration = (CVarDisableEngineAndAppRegistration && CVarDisableEngineAndAppRegistration->GetValueOnAnyThread() != 0) ||
(CVarShaderDevelopmentMode && CVarShaderDevelopmentMode->GetValueOnAnyThread() != 0);
// Use the API version stored in the profile
ApiVersion = GetVulkanApiVersionForFeatureLevel(GMaxRHIFeatureLevel, false);
#if VULKAN_RHI_RAYTRACING
#Loc: <Workspace>/Engine/Source/Runtime/Windows/D3D11RHI/Private/Windows/WindowsD3D11Device.cpp:1823
Scope (from outer to inner):
file
function void FD3D11DynamicRHI::InitD3DDevice
Source code excerpt:
// Engine registration can be disabled via console var. Also disable automatically if ShaderDevelopmentMode is on.
auto* CVarShaderDevelopmentMode = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.ShaderDevelopmentMode"));
auto* CVarDisableEngineAndAppRegistration = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.DisableEngineAndAppRegistration"));
const bool bDisableEngineRegistration = (CVarShaderDevelopmentMode && CVarShaderDevelopmentMode->GetValueOnAnyThread() != 0) ||
(CVarDisableEngineAndAppRegistration && CVarDisableEngineAndAppRegistration->GetValueOnAnyThread() != 0);
const bool bDisableAppRegistration = bDisableEngineRegistration || !FApp::HasProjectName();
AGSDX11ExtensionParams AmdExtensionParams;
FMemory::Memzero(&AmdExtensionParams, sizeof(AmdExtensionParams));
// Set the reserved UAV slot - matching the other vendor extensions.
AmdExtensionParams.uavSlot = 7;