- Plugins that we have cooked with the build will not get their own libraries due to the way the cooker works (all content is cooked at once).
- Do not open any plugins as chunked. Rationale: DLC plugins have chunking turned off (extra code added to validate this), whereas baked-in plugins will not have a separate shader library and will not go through that route.
- Also, do not attempt to load iterative shader library or discover libraries on disk in Test - this is a development feature, whereas Test is used for perf metrics.
#rb Dan.Elksnitis, Eric.Knapik, Justin.Marcus, Daniel.Lamb
[REVIEW] [at]Dan.Elksnitis, [at]Eric.Knapik
[CL 29366205 by arciel rekman in ue5-main branch]
- Shaders can share generated code but generate different Root Parameters. See: UnifiedBuffer.cpp
- Including the hash of the root parameters structure will make sure these shaders compile seperately.
#rb jason.nadro
[CL 29240422 by christopher waters in ue5-main branch]
- New asset associations for already-encountered shadermaps were not being sent to the cook director from the workers,
since the shadermap wasn't new.
- Now the workers will send all encountered shadermaps after the last send (but not their shader code), so new assets that share the same shadermap are known to the director.
#rb Matt.Peters, Dan.Elksnitis
[REVIEW] [at]Matt.Peters, [at]Dan.Elksnitis
[CL 29202154 by arciel rekman in ue5-main branch]
Flattened include dependencies are generated during include scanning at startup, basically for free (perf difference was well below noise). Bulk dependencies reduce round trips to the shader cache (which require mutex locks), and are indexed by the ANSI text exactly as it appears in the include directive in the source files, allowing a faster case sensitive hash, and avoiding the need for expensive path string operations. Anything found in a bulk dependency is stored in an array that parallels the dependency array, rather than a map. Includes stored in IncludeVirtualPathToSharedContentsMap also use an array.
Noting that our string classes (FString) are already case insensitive by default, some unnecessary case conversions were removed. The separate map of "seen" shaders was also removed, as we can just use the LoadedIncludesCache map for the same purpose. Where possible, existing ANSI strings are referenced, avoiding dynamic allocation.
#jira UE-197213
#rnx
#rb yuriy.odonnell jason.nadro
[CL 29095249 by jason hoerner in ue5-main branch]
RHI validation already contains this check, but the callstacks are not very useful when that fires, since the error gets caught on the RHI thread. Doing it in FComputeShaderUtils::ValidateGroupCount catches the problem at the correct spot, i.e. when the pass is added to RDG.
Also, don't Nanite material passes if there aren't any materials (since those would be empty dispatches).
#rnx
#jira UE-195648
#rb graham.wihlidal, christopher.waters
[CL 29012719 by mihnea balta in ue5-main branch]
- Splitting "Bindless Resource" shader parameter types into "Bindless SRV" and "Bindless UAV" to make sure reflection/binding validation is correct.
#jira UE-166341
#rb jeannoe.morissette
[CL 28995862 by christopher waters in ue5-main branch]
- This was not read by any RHI
- Since we cannot deprecate template arguments and since bEnableMSAA was right after bEnableLineAA in TStaticRasterizerState, DepthClipMode was moved to right before bEnableMSAA to make sure remaining uses of bEnableLineAA cause compile errors.
#rb Arciel.Rekman
[CL 28969090 by christopher waters in ue5-main branch]
Add return values for static_assert cases to placate PVS
Fix copy operators not returning this
Fix a handful of other cases
[CL 28955609 by marc audy in ue5-main branch]