void ProcessInputFromArchive(FArchive* InputFilePtr, TArray<FJobResult>& OutJobResults) { int32 NumBatches = 0; FArchive& InputFile = *InputFilePtr; int32 InputVersion; InputFile << InputVersion; checkf(ShaderCompileWorkerInputVersion == InputVersion, TEXT("Exiting due to ShaderCompilerWorker expecting input version %d, got %d instead! Did you forget to build ShaderCompilerWorker?"), ShaderCompileWorkerInputVersion, InputVersion); TMap<FString, uint16> ReceivedFormatVersionMap; InputFile << ReceivedFormatVersionMap; VerifyFormatVersions(ReceivedFormatVersionMap); InputFile << NumBatches; // Flush cache, to make sure we load the latest version of the input file. // (Otherwise quick changes to a shader file can result in the wrong output.) FlushShaderFileCache(); for (int32 BatchIndex = 0; BatchIndex < NumBatches; BatchIndex++) { // Deserialize the job's inputs. FShaderCompilerInput CompilerInput; InputFile << CompilerInput; if (IsValidRef(CompilerInput.SharedEnvironment)) { // Merge the shared environment into the per-shader environment before calling into the compile function CompilerInput.Environment.Merge(*CompilerInput.SharedEnvironment); } // Process the job. FShaderCompilerOutput CompilerOutput; ProcessCompilationJob(CompilerInput,CompilerOutput,WorkingDirectory); // Serialize the job's output. FJobResult& JobResult = *new(OutJobResults) FJobResult; JobResult.CompilerOutput = CompilerOutput; } }
void ProcessInputFromArchive(FArchive* InputFilePtr, TArray<FJobResult>& OutJobResults) { int32 NumBatches = 0; FArchive& InputFile = *InputFilePtr; int32 InputVersion; InputFile << InputVersion; check(ShaderCompileWorkerInputVersion == InputVersion); InputFile << NumBatches; // Flush cache, to make sure we load the latest version of the input file. // (Otherwise quick changes to a shader file can result in the wrong output.) FlushShaderFileCache(); for (int32 BatchIndex = 0; BatchIndex < NumBatches; BatchIndex++) { // Deserialize the job's inputs. FShaderCompilerInput CompilerInput; InputFile << CompilerInput; if (IsValidRef(CompilerInput.SharedEnvironment)) { // Merge the shared environment into the per-shader environment before calling into the compile function CompilerInput.Environment.Merge(*CompilerInput.SharedEnvironment); } // Process the job. FShaderCompilerOutput CompilerOutput; ProcessCompilationJob(CompilerInput,CompilerOutput,WorkingDirectory); // Serialize the job's output. FJobResult& JobResult = *new(OutJobResults) FJobResult; JobResult.CompilerOutput = CompilerOutput; } }