Summary
XGEController passes “-xge_int” before ShaderCompileWorker’s positional arguments, so every Incredibuild (XGE) distributed shader job silently fails and is recompiled locally.
FXGEControllerModule::WriteOutThreadProc (Engine/Plugins/XGEController/Source/Private/XGEControllerModule.cpp) builds the worker parameters as FString::Printf(TEXT(“-xge_int %s”), *Task->CommandData.ExtraCommandArgs). ExtraCommandArgs starts with the positional arguments (“/” 0 “” “”, from ShaderCompilerDistributed.cpp), so the worker is launched as:
ShaderCompileWorker.exe -xge_int “C:/Users//AppData/Local/Temp/UnrealXGEWorkingDir//” 22256 0 “113-xge.Global-FHairInterpolationCS-35.in” “113-xge.Global-FHairInterpolationCS-35.out” -Multiprocess
ShaderCompileWorker reads the working directory from its first argument, gets “-xge_int” instead, finds no input, exits with code 0 and writes no output file. This happens on every XGE agent, including the initiator.
What Type of Bug are you experiencing?
Foundation (C++ Tools, Profiling, & Pipeline)
Steps to Reproduce
XGEController passes “-xge_int” before ShaderCompileWorker’s positional arguments, so every Incredibuild (XGE) distributed shader job silently fails and is recompiled locally.
FXGEControllerModule::WriteOutThreadProc (Engine/Plugins/XGEController/Source/Private/XGEControllerModule.cpp) builds the worker parameters as FString::Printf(TEXT(“-xge_int %s”), *Task->CommandData.ExtraCommandArgs). ExtraCommandArgs starts with the positional arguments (“/” 0 “” “”, from ShaderCompilerDistributed.cpp), so the worker is launched as:
ShaderCompileWorker.exe -xge_int “C:/Users//AppData/Local/Temp/UnrealXGEWorkingDir//” 22256 0 “113-xge.Global-FHairInterpolationCS-35.in” “113-xge.Global-FHairInterpolationCS-35.out” -Multiprocess
ShaderCompileWorker reads the working directory from its first argument, gets “-xge_int” instead, finds no input, exits with code 0 and writes no output file. This happens on every XGE agent, including the initiator.
Expected Result
Distributed shader jobs compile on the XGE agents and return their output, so shaders are not recompiled locally.
Observed Result
Every distributed task finishes in about a second with exit code 0 and no .out file. The log shows “LogShaderCompilers: Display: Rescheduling shader compilation to run locally after distributed job failed: …/UnrealXGEWorkingDir//-xge…out” for every batch (822 times in one Android cook), and all shaders are compiled locally after the wasted round trip. Distributed shader compilation through Incredibuild never succeeds.
Affects Versions
5.8
Platform(s)
Windows
Additional Notes
Every distributed task finishes in about a second with exit code 0 and no .out file. The log shows “LogShaderCompilers: Display: Rescheduling shader compilation to run locally after distributed job failed: …/UnrealXGEWorkingDir//-xge…out” for every batch (822 times in one Android cook), and all shaders are compiled locally after the wasted round trip. Distributed shader compilation through Incredibuild never succeeds.