Commit Graph

98 Commits

Author SHA1 Message Date
ola olsson
e856b953f3 Implement batching of instance culling for non-nanite VSM, all local lights are processed as one dispatch, also:
- Factor out the batching setup & merging from the deferred instance culling
- Refactor the instance culling load balancer to be able to share types between different allocators
- Make batching logic use scene rendering allocator
- Rename RenderVirtualShadowMapsHw to RenderVirtualShadowMapsNonNanite (and similar names)
- Refactor view setup logic for Nanite & Non into common functions

#rb andrew.lauritzen

#ROBOMERGE-AUTHOR: ola.olsson
#ROBOMERGE-SOURCE: CL 18293379 via CL 18373760 via CL 18373855
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18373879 by ola olsson in ue5-release-engine-test branch]
2021-12-03 16:38:33 -05:00
andrew lauritzen
1dfa763b1f - Generalize one pass projection shadow mask to support up to 32 lights/pixel with 4bpp quantization
- Add some dither noise to both the SMRT result and the shadow mask lookup to minimize banding
- Fall back to a single sample VSM lookup (with a generous static bias) when overflowing the number of lights in one pass projection path
- Fix clamping issue with page dilation that was setting extraneous pages with point lights
- Fix SMRT issue with local lights jammed right next to geometry viewed at a distance
- Separate settings for page dilation for local and directional lights
- Add simple debug output for # lights in one pass projection
- Remove some dead code/parameters

#ROBOMERGE-AUTHOR: andrew.lauritzen
#ROBOMERGE-SOURCE: CL 18279117 via CL 18373418 via CL 18373449
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18373485 by andrew lauritzen in ue5-release-engine-test branch]
2021-12-03 16:23:04 -05:00
ola olsson
bcf06c3e25 Add message to read back page pool status to host & display error message
- also make GPUMessage thread safe

#rb andrew.lauritzen,rune.stubbe
[FYI] zach.bethel
#preflight 619bb74a88439fccfe6342fb

#ROBOMERGE-AUTHOR: ola.olsson
#ROBOMERGE-SOURCE: CL 18269058 via CL 18372981 via CL 18373072
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18373123 by ola olsson in ue5-release-engine-test branch]
2021-12-03 16:08:27 -05:00
guillaume abadie
aecd1b7f72 Fixes compilation failure in VirtualShadowMapArray.cpp
#ROBOMERGE-AUTHOR: guillaume.abadie
#ROBOMERGE-SOURCE: CL 18370136 in //UE5/Release-5.0/... via CL 18370159
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18370215 by guillaume abadie in ue5-release-engine-test branch]
2021-12-03 13:29:07 -05:00
ola olsson
cbf0961826 Fix inverted condition in VSM causing artifacts with dynamic/static separate pages
#rb rune.stubbe
#preflight 616426979c9d4500010de4f0
#lockdown michal.valient
[FYI] andrew.lauritzen

#ROBOMERGE-AUTHOR: ola.olsson
#ROBOMERGE-SOURCE: CL 17771873 via CL 17986059 via CL 18368160 via CL 18368236
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18368270 by ola olsson in ue5-release-engine-test branch]
2021-12-03 10:05:20 -05:00
andrew lauritzen
6c8a66737a Round HZB up to pow2 size in indirect VSM path as some of the sampling code depends on it.
Add cvar for 32 vs 16-bit VSM. Default 32 as currently but will revisit.
Minor cvar rename for consistency.
Enforce SM5 for VSM shaders (already implied by Nanite support, but make it explicit.)

#rb rune.stubbe
[FYI] ola.olsson
#preflight 615cc74ebb992a0001e4adaa
#lockdown michal.valient

#ROBOMERGE-AUTHOR: andrew.lauritzen
#ROBOMERGE-SOURCE: CL 17729626 via CL 17980774 via CL 18366981 via CL 18367016
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18367032 by andrew lauritzen in ue5-release-engine-test branch]
2021-12-03 03:01:35 -05:00
andrew lauritzen
2a232eb1f8 Fix indirect HZB generation for static pages
Minor cleanup to logic to try and avoid similar issues

#rb graham.wihlidal
[FYI] ola.olsson
#preflight 6156462e9dc4c50001365202
#lockdown michal.valient

#ROBOMERGE-AUTHOR: andrew.lauritzen
#ROBOMERGE-SOURCE: CL 17685329 via CL 17967455 via CL 18366106 via CL 18366202
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18366310 by andrew lauritzen in ue5-release-engine-test branch]
2021-12-03 01:39:26 -05:00
ola olsson
1744646e6d Add building VSM HZB for only pages that are allocated, using indirect-dispatch, saves around 0.4ms in typical views.
#rb andrew.lauritzen
#preflight 615468dcf4d2a400010d35c1
#lockdown michal.valient

#ROBOMERGE-AUTHOR: ola.olsson
#ROBOMERGE-SOURCE: CL 17675060 via CL 17966250 via CL 18365947 via CL 18366073
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18366176 by ola olsson in ue5-release-engine-test branch]
2021-12-03 01:31:24 -05:00
andrew lauritzen
401fa08b49 Compile fix
[FYI] ola.olsson
#jira horde

#ROBOMERGE-AUTHOR: andrew.lauritzen
#ROBOMERGE-SOURCE: CL 18364834 in //UE5/Release-5.0/... via CL 18364868
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18364933 by andrew lauritzen in ue5-release-engine-test branch]
2021-12-02 23:47:57 -05:00
andrew lauritzen
63b5077326 Fix typo in previous commit
#preflight skip
#lockdown michal.valient

#ROBOMERGE-AUTHOR: andrew.lauritzen
#ROBOMERGE-SOURCE: CL 17579073 via CL 17947318 via CL 18364005 via CL 18364105
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18364261 by andrew lauritzen in ue5-release-engine-test branch]
2021-12-02 23:18:40 -05:00
andrew lauritzen
4bdb2cf471 Add debug visualization for VSM caching bin and some minor cleanup
#rb graham.wihlidal
#preflight 614909d4116f2a00017632c4
[FYI] ola.olsson
#lockdown michal.valient

#ROBOMERGE-AUTHOR: andrew.lauritzen
#ROBOMERGE-SOURCE: CL 17578872 via CL 17947144 via CL 18363889 via CL 18364001
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18364100 by andrew lauritzen in ue5-release-engine-test branch]
2021-12-02 23:12:09 -05:00
andrew lauritzen
a9a04f3a20 Enable indirect clear/merge by default
#rb ola.olsson
#lockdown Michal.Valient
#preflight 6145187dbf494a0001a5d993

#ROBOMERGE-AUTHOR: andrew.lauritzen
#ROBOMERGE-SOURCE: CL 17559918 via CL 17946265 via CL 18363853 via CL 18363979
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18364075 by andrew lauritzen in ue5-release-engine-test branch]
2021-12-02 23:10:49 -05:00
ola olsson
053ef3d05f Make VSM physical pageinitialization and merge use indirect dispatch to only operate on needed pages.
#rb Andrew.Lauritzen
#preflight 614392d1b5a4fa000169fd47
#lockdown michal.valient

#ROBOMERGE-AUTHOR: ola.olsson
#ROBOMERGE-SOURCE: CL 17550967 via CL 17945639 via CL 18363730 via CL 18363958
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18364052 by ola olsson in ue5-release-engine-test branch]
2021-12-02 23:09:13 -05:00
jon nabozny
87abd3f7ad Initial implementation of separate static/dynamic VSM page caching to lower cost of dynamic invalidations
- Disabled by default pending some additional optimization, but showing promising initial results

#rb ola.olsson
[FYI] brian.karis, rune.stubbe
#preflight 614262b39bba9a0001a9ee58
#lockdown michal.valient

#ROBOMERGE-OWNER: jon.nabozny
#ROBOMERGE-AUTHOR: andrew.lauritzen
#ROBOMERGE-SOURCE: CL 17528599 via CL 17943875 via CL 18363706 via CL 18363947
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18364037 by jon nabozny in ue5-release-engine-test branch]
2021-12-02 23:08:02 -05:00
jon nabozny
a6136b2a60 Occlusion cull instances drawing into non-nanite VSM (controlled by r.Shadow.Virtual.NonNanite.UseHZB, default mode 2)
- Added stats for non-nanite VSM instance culling (moved VSM stats functionality into own file).
- r.Shadow.Virtual.NonNanite.UseHZB == 2 (default) uses the current-frame Nanite VSM HZB as this enables correct culling for camera cuts & light movement and contains most of the occluding geometry.

#rb Andrew.Lauritzen
#preflight 6138a6582d09b90001568819

#ROBOMERGE-OWNER: jon.nabozny
#ROBOMERGE-AUTHOR: ola.olsson
#ROBOMERGE-SOURCE: CL 17470225 via CL 17923040 via CL 18360986 via CL 18361244
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18361409 by jon nabozny in ue5-release-engine-test branch]
2021-12-02 18:25:13 -05:00
jeannoe morissette
17b84d83db Fix all cases of single scalar in shader parameter arrays to respect 16 byte alignment for Vulkan.
Add static_assert to prevent the creation of new ones moving forward.
Used SHADER_PARAMETER_SCALAR_ARRAY/GET_SCALAR_ARRAY_ELEMENT for single parameters, or packed them with surrounding parameters when possible.

#rb Guillaume.Abadie,Daniel.Wright,Charles.deRousiers
#preflight 61577bf15631d900011d59a1

#ROBOMERGE-AUTHOR: jeannoe.morissette
#ROBOMERGE-SOURCE: CL 17707027 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v879-17706426)
#ROBOMERGE[STARSHIP]: UE5-Release-Engine-Staging Release-5.0

[CL 17707037 by jeannoe morissette in ue5-release-engine-test branch]
2021-10-04 09:14:58 -04:00
andrew davidson
57beb335f2 Merging //UE5/Dev-LargeWorldCoordinates [at] 17581892 to //UE5/Main
#ROBOMERGE-AUTHOR: andrew.davidson
#ROBOMERGE-SOURCE: CL 17595295 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v871-17566257)

[CL 17595306 by andrew davidson in ue5-release-engine-test branch]
2021-09-22 10:01:48 -04:00
aurel cordonnier
7f517562d5 Merge from Release-Engine-Staging @ 17438845 to Release-Engine-Test
This represents UE4/Main @17430120 and Dev-PerfTest @17437669

[CL 17439044 by aurel cordonnier in ue5-release-engine-test branch]
2021-09-06 12:23:53 -04:00
ola olsson
c78ae71b1f Replace side-effect invalidation during instance/cluster cull with a buffer appended to at instance cull.
- preparational step to enable HZB culling of invalidations in an uniform way.
- also add FComputeShaderUtils helper to set up an indirect dispatch.

#rb andrew.lauritzen
#preflight 6130818017a8610001b0cfc7

#ROBOMERGE-SOURCE: CL 17400532 via CL 17400838
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v865-17346139)

[CL 17400862 by ola olsson in ue5-release-engine-test branch]
2021-09-02 07:13:18 -04:00
charles derousiers
8baac25269 Add full/partial/all tile classification for finer dispatch.
Add generation for indirect arg buffer for raytracing indirect dispatch.

#rb none
#preflight 61307b511a52e20001966113

#ROBOMERGE-OWNER: charles.derousiers
#ROBOMERGE-AUTHOR: charles.derousiers
#ROBOMERGE-SOURCE: CL 17399381 via CL 17400082
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v865-17346139)

[CL 17400113 by charles derousiers in ue5-release-engine-test branch]
2021-09-02 05:43:40 -04:00
andrew lauritzen
ead3650569 Virtual shadow maps: early out on pixels backfacing the light in both projection and page allocation
Page allocation part is a fairly minor benefit in most scenes but can occasionally make a big difference.
Projection early-out is a pretty uniform benefit all the time, especially with SMRT.

#preflight 612d1b836a14cc000118f03a
#rb ola.olsson

#ROBOMERGE-SOURCE: CL 17388425 via CL 17389280
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v865-17346139)

[CL 17389330 by andrew lauritzen in ue5-release-engine-test branch]
2021-09-01 13:13:01 -04:00
charles derousiers
a91bbfa21e Change & clean hair tile resources to share buffers for adding later on full/partially covered tile support.
#rb none
#preflight 612f604d677f0e0001866d50

#ROBOMERGE-OWNER: charles.derousiers
#ROBOMERGE-AUTHOR: charles.derousiers
#ROBOMERGE-SOURCE: CL 17385390 via CL 17387630
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v865-17346139)

[CL 17387665 by charles derousiers in ue5-release-engine-test branch]
2021-09-01 11:46:13 -04:00
graham wihlidal
29b4ac53b7 Implemented a new payload data allocator and buffer in GPU Scene that will be used to allow instances to dynamically allocate optional side-car data rather than always paying a fixed high watermark cost in the scene data layout (often features are never used by most instances).
#rb brian.karis
[FYI] christopher.waters, ola.olsson, krzysztof.narkowicz
#preflight 6123e56d8ff55400011df401
[FYI] Dmitriy.Dyomin

#ROBOMERGE-OWNER: graham.wihlidal
#ROBOMERGE-AUTHOR: graham.wihlidal
#ROBOMERGE-SOURCE: CL 17275101 via CL 17276332
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v858-17259218)

[CL 17276338 by graham wihlidal in ue5-release-engine-test branch]
2021-08-23 16:47:16 -04:00
andrew lauritzen
eebbe18a26 Add flag to mark page requests/allocated pages as excludig non-nanite geometry.
Add cvar for including non-nanite geometry in coarse pages (so that one can disable for performance reasons). Default on.
Some general unused flags cleanup.

#rb rune.stubbe
#preflight 610ccc0e6c6eb0000196b59e

#ROBOMERGE-SOURCE: CL 17085350 via CL 17095081
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v853-17066230)

[CL 17095354 by andrew lauritzen in ue5-release-engine-test branch]
2021-08-07 15:19:34 -04:00
dmitriy dyomin
b0828d6beb Mobile specific implementation for auto-instancing. (disabled by default atm)
Run a compute job that packs most commonly used instance data (LocalToWorld matrix and some other bits - 80 bytes) into per-instance vertex buffer. Vertex shader does not have access to GPUScene and instead loads instance data from a per-instance vertex buffer. If it needs more primitive/instance data than available then it will load it from Primitive UB, binding unique uniform buffer and breaking auto-instancing. Pixel shader has a full access to a GPUScene
There are 3 ways how FSceneDataIntermediates gets populated
 1. PrimitiveId + GPUScene (Desktop)
 2. Per-Instance data + Primitive UB (Mobile)
 3. Primitive UB (auto-instancing disabled)
Details for GPUScene specific vertex inputs and access to FSceneDataIntermediates are hidden behind a macro:
VF_GPUSCENE_DECLARE_INPUT_BLOCK
VF_GPUSCENE_GET_INTERMEDIATES
FSceneDataIntermediates is now stored in FVertexFactoryIntermediates, FMaterialVertexParameters. Added a few GetPrimitiveData() overloads that allows you to access PrimitiveData depending on current context. Removed most of the cases where GetPrimitiveData() gets used with PrimitiveId.
#rb Ola.Ollson

#ROBOMERGE-SOURCE: CL 17093848 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v853-17066230)

[CL 17093856 by dmitriy dyomin in ue5-release-engine-test branch]
2021-08-07 07:20:52 -04:00