resubmit with following fixes:
- static analysis error which caught an >=0 check on a uint64 which should have been >0
- fix for an inverted guard on multiprocess cook sending bytecode to director (was only sending code across if empty instead of non-empty)
- fix for uninitialized padding in the FShaderCodeResource::FHeader struct causing nondeterministic puts
- fix for incorrect size passed to job cache hashing on receiving buffers from DDC
#rb Devin.Doucette, Laura.Hermanns, Zousar.Shaker
#lockdown Marc.Audy
[CL 36754792 by dan elksnitis in 5.5 branch]
[FYI] dan.elksnitis
Original CL Desc
-----------------------------------------------------------------
[shaders] modify FShaderCode finalize to create a FSharedBuffer object, and modify all downstream uses of shader code to re-use this buffer (job cache, pushes to DDC, shader maps, and shader library). This reduces total amount of LLM tracked memory allocated at the end of a cold Lyra PS4 cook by about ~350MB; impact likely much larger for cooks of larger projects.
#rb Devin.Doucette, Zousar.Shaker
#lockdown Marc.Audy
resubmit with SA+MP cook fix
[CL 36747522 by dan elksnitis in 5.5 branch]
[FYI] dan.elksnitis
Original CL Desc
-----------------------------------------------------------------
[shaders] modify FShaderCode finalize to create a FSharedBuffer object, and modify all downstream uses of shader code to re-use this buffer (job cache, pushes to DDC, shader maps, and shader library). This reduces total amount of LLM tracked memory allocated at the end of a cold Lyra PS4 cook by about ~350MB; impact likely much larger for cooks of larger projects.
#rb Zousar.Shaker
#lockdown marc.audy
[CL 36440265 by dan elksnitis in 5.5 branch]
Enabling it will force a multipass rendering where GBuffer and SceneColor are resolved to a system memory
[CL 36327269 by dmitriy dyomin in 5.5 branch]
POST_PROCESS_ALPHA is completely removed from the engine, and the holdout-specific shader code is conditionally compiled based on a new SUPPORT_PRIMITIVE_ALPHA_HOLDOUT definition to isolate its added cost in the deferred renderer.
The new holdout project setting is called "Support Primitive Alpha Holdout (Deferred)" and can be found in under the "Optimizations" section of the renderer settings. Engine component, MRQ & HoldoutComposite plugin toast notifications for setting activation is left as separate CL.
#jira UE-220034
#rb chris.kulla, Sebastien.Hillaire
[CL 35895537 by eric renaudhoude in ue5-main branch]
This relaxes the "linear-only" constraint with 1, and simplifies the option for users. Values 1 & 2 are automatically converted to "True" upon config/cvar load, and thus both existing values remain valid. While most backwards compatiblity is preserved, there are two instances where external code will need to be updated:
* Calls to FindTConsoleVariableDataInt(..) will need to be replaced with regular FindConsoleVariable(..), since the former call would silently fail on a bool cvar.
* Any literal comparison to "2" not using EAlphaChannelMode::Type, which is now deprecated.
We believe this remains preferable over migration to an entirely new cvar. This change also removes experimental naming.
#jira UE-220034
#rb Florin.Pascu, Matt.Hoffman, Aleksander.Netzel, juan.canada
[CL 35501877 by eric renaudhoude in ue5-main branch]
Emissive of volumetric fog now follow the distribution of the exp height fog.
Exp fog follow the emissive and albedo of the volumetric fog. And it also uses the same PhaseG and phase function as the volumetric fog (the UI for in scattering is then disabled when the project setting is enabled)
Now volumetric fog looks mostly different due to the lact of shadow casting or difference integration of ambient (through lumen for instance).
This allows for lumen fog sampling to even better match the environment. (currently not including volumetric fog material and local fog volume as this would be a lot more expenssive).
[FYI] Krzysztof.Narkowicz
[CL 34421633 by sebastien hillaire in ue5-main branch]
- Memory Image serialization is problematic due to padding in structures and uninitialized data. This can be handled by marking up each class and member with macros, but this can be invasive for common types like TMaps and TVariants.
- To fix the issue I've completely removed the shader stats from the memory image serialization and this avoids the issue, and most of the code can stay the same.
- Generic stats aren't store on the FShader anymore, and the stats have been moved to an array on the FShaderEditorOnlyDataEntry data object owned by the FShaderMapResourceCode owned by the base shader map class. This data is natively serializated we don't have the issues that the memory images do.
- This required fixup on the interfaces that query for the generic shader stats to get this data from a different location.
- Wrap all the code in WITH_EDITORONLY_DATA
- Turn the stats into a struct, FGenericShaderStat, and we just store an array of them. We don't really need fast lookup.
#rb dan.elksnitis, Laura.Hermanns
[FYI] Zousar.Shaker
[CL 34317171 by jason nadro in ue5-main branch]
r.Mobile.Forward.RenderRectLightsAsSpotLights will only affect lights that use LightGrid, translucency or clustered
[CL 34120289 by dmitriy dyomin in ue5-main branch]
- Add option for ShaderType to declare which FShaderBindingLayout needs to be used for shader gen and runtime binding
- Add helper function to generate FShaderBindingLayoutContainer from array of uniform buffers and EShaderResourceTableFlags (only supports bindless mode right now)
- Serialize the FRHIShaderBindingLayout in FShaderCompilerEnvironment so it can be used by the shader compiler backends
- FShaderBindingLayout can add required symbols to the FShaderCompilerInput which shouldn't be dead code eliminated (required for Shader resource table building)
- Serialize the hash of RHIShaderResourceTable in the platform specific shader binary data so it can be used during runtime RTPSO validation (all shaders in the RTPSO need the same RHIShaderResourceTable)
- Renamed pRootSignaure member to RootSignature (style guide)
#jira UE-212347
[CL 33624453 by kenzo terelst in ue5-main branch]