[5.8.3] GEController prepends -xge_int to ShaderCompileWorker args, so all Incredibuild shader jobs silently fail

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.