Commit Graph

76 Commits

Author SHA1 Message Date
danny couture
d5ba6e94d9 Remove BackgroundPriority to let the ParallelFor auto select the best priority depending on which thread is launching the paralllelfor
i.e. This allows latency sensitive texture compression parallelfor from the gamethread to benefit from all the foreground threads and complete faster

#rb Arne.Schober

[CL 15387719 by danny couture in ue5-main branch]
2021-02-11 11:01:47 -04:00
Arne Schober
df09d6779f U5 - Move TextureCompression into ParallelFor
[CL 15378859 by Arne Schober in ue5-main branch]
2021-02-10 15:26:28 -04:00
Jeremy Moore
4298fbf748 Add flag to support texture build not stripping the alpha channel.
This has a single use case: We build streaming virtual textures from runtime virtual textures and we want to ensure the format doesn't change just because the alpha channel is all 1.
#jira none
#rb danny.couture

[CL 15275121 by Jeremy Moore in ue5-main branch]
2021-02-01 17:30:41 -04:00
danny couture
6bfd85065f Make ParallelFor automatically pick the right scheduling priority to avoid low prio task interfering with the game and render threads causing huge stalls
- This dramatically improves editor framerate under high load
Cleanup all the hacks that are not needed anymore

#rb Andriy.Tylychko

[CL 14676999 by danny couture in ue5-main branch]
2020-11-06 11:20:53 -04:00
Marc Audy
68150e0be7 Merge UE5/Release-Engine-Staging to UE5/Main @ 14611496
This represents UE4/Main @ 14594913

[CL 14612291 by Marc Audy in ue5-main branch]
2020-10-29 13:38:15 -04:00
Uriel Doyon
86b86e6713 Fixed texture LODGroup settings not being correctly setup at engine initialization.
Enabled back checks on power of 2 textures when generating mips.
#rb josh.adams
#jyi rolando.caloca
#jira UE-101452

[CL 14550682 by Uriel Doyon in ue5-main branch]
2020-10-22 18:13:26 -04:00
Rolando Caloca
42065199d1 UE5 - Update to 14516366
#rnx
#jira UE-101247
#rb Uriel.Doyon

[CL 14516381 by Rolando Caloca in ue5-main branch]
2020-10-19 14:22:47 -04:00
Rolando Caloca
c80d9f045a UE5 - Update to 14516198
#rnx
#jira UE-101247
#rb Uriel.Doyon

[CL 14516366 by Rolando Caloca in ue5-main branch]
2020-10-19 14:19:59 -04:00
Rolando Caloca
ed2c58a60c UE5 - Fix check for mip generation of odd-sized textures
#rb Danny.Couture, Uriel.Doyon
#jira UE-101247
#rnx

[CL 14514844 by Rolando Caloca in ue5-main branch]
2020-10-19 12:21:37 -04:00
Marc Audy
50a3d7d368 Merge Release-Engine-Staging to Main @ CL# 14467590
This represents UE4/Main @ 14432125 + some cherrypick fixes

[CL 14468207 by Marc Audy in ue5-main branch]
2020-10-09 22:42:26 -04:00
Marcus Wassmer
3b81cf8201 Merging using //UE5/Main_to_//UE5/Release-Engine-Staging @14384769
autoresolved files
#rb none

[CL 14384911 by Marcus Wassmer in ue5-main branch]
2020-09-24 00:43:27 -04:00
danny couture
90ed5f144f Optimize NVTT texture compression using AVX2
- Load the proper delay-loaded dll depending on instruction support of the current platform.
  - Replaced reciprocal approximation with proper division.
    - This improves performance as the division is faster than a reciprocal with refinement on recent CPUs.
    - This improves quality as the division provides higher precision.
    - It fixes a nasty non-determinism in the DDC because reciprocal yield different results on different CPUs.
  - Configured so that AVX2 and SSE2 results are exactly the same (see config.h).
  - More details can be found in config.h

  - 80.773s -> 47.547s for single-threaded 8k texture compression
  - 18m34s -> 14m50s for recompressing all textures of Reverb P_World during level loading.

#rb Francis.Hurteau, Geoff.Evans

[CL 14362917 by danny couture in ue5-main branch]
2020-09-22 05:48:20 -04:00
danny couture
d690175898 Fix game-thread stutter when compressing texture from worker threads
#rb Francis.Hurteau

[CL 13950969 by danny couture in ue5-main branch]
2020-07-27 19:55:21 -04:00
danny couture
ff158b6e95 Async Texture Compilation
- Feature can be activated in the Experimental section of the Editor Settings
 - Replace Texture2D/TextureCube resources by placeholders until their PlatformData is ready
 - Add a utility class allowing to encapsulate raw field pointers without breaking compatibility
 - Protect PlatformData from unsafe access through encapsulation.
 - Protect texture's resource from race conditions between game and render threads through encapsulation.
    - This allows to get rid of FlushRenderingCommands and long game-thread stutters when Updating a texture's resource.
    - UpdateResource was never safe to call without a FlushRenderingCommands and multiple call-site are doing exactly that, this will fix those cases.
    - Those were probably undetected due to their low occurence rate under normal conditions but can easily be reproed during async texture compilation on 32 cores.
 - Force wait on required texture compilations for MaterialBaking, ProxyMesh, Thumbnail generation for disk usage
 - Wait on all textures compilation whenever a wait for all shaders compilation is requested for safety (i.e. screenshot)
 - Compile UI and heightmap textures with higher priority to reduce visual artefacts
 - Increase priority of texture that have been rendered to improve time-to-usefulness of the editor under low core count
 - Async compilation is disabled for -game / non-editor mode as there is currently no support for async bulk data loading from external files
 - Properly cancel async tasks when UTexture is garbage collected before the compilation is finished
 - Show progress when explicitly waiting on compilation
 - Changing the mip settings in the texture editor (or any settings requiring the running platform data to be recomputed) will now be processed asynchronously.

DEBUGGING

 - Can be forcibly enabled/disabled through command-line via -asynctexturecompilation=[off, on, paused]
 - Can pause texture compilation using Editor.AsyncTextureCompilation = 2 or -asynctexturecompilation=paused
 - Can manually resume a specified amount of paused compilation using Editor.AsyncTextureCompilationResume [Num]
 - Can forcibly wait on all compilation using Editor.AsyncTextureCompilationFlushAll

BENCHMARKS

 - 3m15s to 1m20s when loading Apollo_Terrain with no textures in DDC (AMD TR 3970X)
 - 6m45s to 1m11s when loading Apollo_Terrain with no textures in DDC (-corelimit=8)
 - 3m10s to 1m54s when lauching PIE on Apollo_Terrain with no textures in DDC (AMD TR 3970X)
 - 7m43s to 1m36s when lauching PIE on Apollo_Terrain with no textures in DDC (-corelimit=8)
 - 0m57s to 0m42s when importing Attic_NVIDIA.usd with no textures in DDC (AMD TR 3970X)
 - 2m14s to 0m35s when importing Attic_NVIDIA.usd with no textures in DDC (-corelimit=4)

TESTS
 - Success on all material baking tests from EngineTests with -asynctexturecompilation=paused
 - Runned with -corelimit=1 all the way to unlimited
 - Cooking worked
 - Opening the texture editor/material editor will force the compilation to finish like expected.
 - Changing a setting in the texture editor will recompile async, even allowing to close the editor and continue doing other changes.
 - Unpausing the compilation will update the texture thumbnails properly.
 - Started with -asynctexturecompilation=paused, and then unpaused after a map loading, and then into a PIE session to stresstest UpdateResources.
 - Tested both dx11/dx12
 - Vulkan fails on Fortnite even with -asynctexturecompilation=off because of Landscape weigthmap, not this CL.
 - Compiled and tested FortniteGame / UE4 / ShooterGame projects

#rb Uriel.Doyon, Francis.Hurteau

[CL 13694814 by danny couture in ue5-main branch]
2020-06-16 22:16:25 -04:00
dmitriy dyomin
533509d73b Add an option to downscale textures without mips. Accepts values between 1.0 and 8.0.
Can be overriden per-platform, for a specifc texture or texture group.
Downscaling will keep texure size divisible by 4 so they can still be compressed
#rb chris.bunner


#ROBOMERGE-SOURCE: CL 12400453 via CL 12400465 via CL 12400467
#ROBOMERGE-BOT: (v671-12333473)

[CL 12402238 by dmitriy dyomin in Release-Engine-Staging branch]
2020-03-25 08:18:43 -04:00
Rolando Caloca
bbb9564388 Copying //UE4/Dev-RenderPlat-Staging@11110326 to //UE4/Main
#rb none
#rnx

[CL 11110369 by Rolando Caloca in Main branch]
2020-01-24 18:07:01 -05:00
JeanMichel Dignard
99b55fb883 Merged main @ cl 10981486
#rb none
#rnx

[CL 10985598 by JeanMichel Dignard in Dev-Tools-Staging branch]
2020-01-14 14:45:07 -05:00
julien stjean
6e4b0a168d Hot fix for a crash where we ended up creating more mip map level then we should had.
This issue was happening after using LeaveExistingMips for the MipGenSettings and setting a maximun texture size.
Added a validation when getting that data from the ddc as it could be invalid.

#jira UE-85228
#rb JeanMichel.Dignard, Mihnea.Balta
#lockdown nick.penwarden

#ROBOMERGE-SOURCE: CL 10950746 in //UE4/Release-4.24/...
#ROBOMERGE-BOT: RELEASE (Release-4.24 -> Main) (v632-10940481)

[CL 10950747 by julien stjean in Main branch]
2020-01-13 07:12:12 -05:00
JeanMichel Dignard
70d074639f Merging //UE4/Dev-Main @ 10886849 to Dev-Tools-Staging (//UE4/Dev-Tools-Staging)
#rb none
#rnx

[CL 10906274 by JeanMichel Dignard in Dev-Tools-Staging branch]
2020-01-08 13:26:18 -05:00
ryan durand
471d972e62 Updating copyright for Engine Developer.
#rnx
#rb none


#ROBOMERGE-SOURCE: CL 10869240 via CL 10869516 via CL 10869902
#ROBOMERGE-BOT: (v613-10869866)

[CL 10870584 by ryan durand in Main branch]
2019-12-26 15:32:37 -05:00
luke thatcher
65b1959a67 Remove PlatformRequiresOptTextureData and rework how those fields are serialized to prevent crashes when loading cooked data in the editor.
- An additional bit in the FTexturePlatformData next to the Cubemap bit is used to indicate whether the structure contains non-default OptData. Contents of the OptData field is only serialized when that bit is set.
 - Platforms which do no make use of OptData will automatically not have that data in their cooked byte stream, as the values will remain default. Platform that do set those values will have the data included and the bit set.

#rb Paul.Chipchase
#jira UE-84435
#lockdown nick.penwarden

#ROBOMERGE-OWNER: jeanmichel.dignard
#ROBOMERGE-AUTHOR: luke.thatcher
#ROBOMERGE-SOURCE: CL 10334591 in //UE4/Release-4.24/... via CL 10334594
#ROBOMERGE-BOT: TOOLS (Main -> Dev-Tools-Staging) (v594-10333955)

[CL 10410198 by luke thatcher in Dev-Tools-Staging branch]
2019-11-25 07:11:39 -05:00
JeanLuc Corenthin
276d3af9b8 Copy up //UE4/Dev-Enterprise/... to //UE4/Dev-Tools-Staging/...
#rb none

[CL 10371791 by JeanLuc Corenthin in Dev-Tools-Staging branch]
2019-11-22 10:05:55 -05:00
luke thatcher
13bbcdb73a Remove PlatformRequiresOptTextureData and rework how those fields are serialized to prevent crashes when loading cooked data in the editor.
- An additional bit in the FTexturePlatformData next to the Cubemap bit is used to indicate whether the structure contains non-default OptData. Contents of the OptData field is only serialized when that bit is set.
 - Platforms which do no make use of OptData will automatically not have that data in their cooked byte stream, as the values will remain default. Platform that do set those values will have the data included and the bit set.

#rb Paul.Chipchase
#jira UE-84435
#lockdown nick.penwarden

#ROBOMERGE-SOURCE: CL 10334591 in //UE4/Release-4.24/...
#ROBOMERGE-BOT: RELEASE (Release-4.24 -> Main) (v594-10333955)

[CL 10334594 by luke thatcher in Main branch]
2019-11-21 08:53:37 -05:00
rolando caloca
33e6e98b5c Add more info to failed composite texture
#rb trivial
#rnx


#ROBOMERGE-SOURCE: CL 10017753 via CL 10017763 via CL 10020182 via CL 10020254
#ROBOMERGE-BOT: (v562-10004402)

[CL 10020374 by rolando caloca in Main branch]
2019-11-05 14:56:48 -05:00
luke thatcher
da93476a62 Make the serialization of the ExtData and NumMipsInTail members of FTexturePlatformData optional, based on whether the target platform actually requires them. This is to prevent changes to cooked asset data causing large patch sizes on platforms that otherwise would not use the new members.
Platforms that do need the additional members should override FPlatformProperties::RequiresOptTextureData() to return true.

#rb Rolando.Caloca, Uriel.Doyon
#jira none

#ROBOMERGE-SOURCE: CL 9835488 in //UE4/Release-4.24/...
#ROBOMERGE-BOT: RELEASE (Release-4.24 -> Main) (v546-9757112)

[CL 9835503 by luke thatcher in Main branch]
2019-10-25 07:23:05 -04:00