27 Commits

Author SHA1 Message Date
dan thompson
0a6eb11037 Preview Platform Textures
-- Added Decode interface to texture formats to return to PC viewable formats.
-- Added Detile interface to return textures to linear layout for relevant platforms.
-- Reworked the IBuild "DDC2" texture build usage to be more straightforward for chaining multiple build steps (i.e. Encode -> Tile -> Detile -> Decode).
-- Added UI to the texture editor to select a target platform to view.
-- Fixed a bug with DDC2 and CPU Copy textures (they didn't work at all)
#rb Devin.Doucette, fabian.giesen, charles.bloom
#jira UE-149124

[CL 33116818 by dan thompson in ue5-main branch]
2024-04-19 16:57:52 -04:00
louisphilippe seguin
36c722f3c4 Fix wrong printf parameters in checkf & ensuremsgf found in engine code
#rb Fabian.Giesen, Kirill.Zorin
#rnx

[CL 27519547 by louisphilippe seguin in ue5-main branch]
2023-08-31 08:56:30 -04:00
dan thompson
b361dacafb Clang specific cast warnings, and fixing an incorrect cast fix from last checkin.
#rb fabian.giesen
#preflight 646b9adb4130b0ce5038e725

[CL 25568727 by dan thompson in ue5-main branch]
2023-05-22 15:17:38 -04:00
charles bloom
420b6f6adb TextureCompressorModule : run hashing for metadata on an async task
change FImage passed to TextureFormat to be const, it must not be changed becausing hashing is running threaded
remove early frees of intermediate image; this increases peak memory use

#preflight https://horde.devtools.epicgames.com/job/643ff4a3090323f9a3f7695e
#rb dan.thompson

[CL 25116608 by charles bloom in ue5-main branch]
2023-04-19 17:29:39 -04:00
Dan Thompson
9a6a7a84d9 Plumb the mip layout down to the child texture ddc key versions as certain child formats need to know mip dimensions in order to know if aspects of the build affect the textures, as well as note in the extended data whether the texture tiling is sensitive to LODBias so that textures that change layouts as a result of that are independent in the ddc.
This also fixes the missing include path for TextureFormat.Build.cs

#rb fabian.giesen
#rb charles.bloom
#preflight 6421fa27974dfaa53cb188e5

[CL 24808879 by Dan Thompson in ue5-main branch]
2023-03-27 16:39:53 -04:00
Dan Thompson
6acfb3256c [Backout] - CL24678894
#fyi Dan.Thompson
Original CL Desc
-----------------------------------------------------------------
Plumb the mip layout down to the child texture ddc key versions as certain child formats need to know mip dimensions in order to know if aspects of the build affect the textures.
#rb fabian.giesen
#rb charles.bloom
#preflight 641378f03f3d31c94a2e86b5
#preflight 64149d297d1280ffe750d78e

[CL 24691763 by Dan Thompson in ue5-main branch]
2023-03-17 13:13:02 -04:00
Dan Thompson
98bcf4f1cb Plumb the mip layout down to the child texture ddc key versions as certain child formats need to know mip dimensions in order to know if aspects of the build affect the textures.
#rb fabian.giesen
#rb charles.bloom
#preflight 641378f03f3d31c94a2e86b5

[CL 24678894 by Dan Thompson in ue5-main branch]
2023-03-16 16:42:02 -04:00
Dan Thompson
5a737ea6bc Texture tiling fix.
Certain platforms that tile textures will tile non pow2 textures with mips different than non pow2 textures without mips, so we need to plumb down information about the mip chain to the tiling texture formats.
#rb fabian.giesen
#preflight 64068553aa00423335f30765

[CL 24546549 by Dan Thompson in ue5-main branch]
2023-03-07 15:15:48 -05:00
henrik karlsson
ce587eb612 Added markups for headers that can't be compiled standalone.. this is needed for both Header units and IWYU
#preflight 63789b0c170bc34a93a869e5
#rb none

[CL 23552160 by henrik karlsson in ue5-main branch]
2022-12-21 02:46:50 -05:00
Dan Thompson
f3d53d2ba3 Fix for mip generation for child platforms unnecessarily linearizing.
TextureFormatOodle is the only format that returns true for CanAcceptNonF32Source(), which allows the build system to occasionally avoid converting to an F32 input to the compressor. However, the ChildTextureFormat for offline platform processing did not forward this function so this conversion was happening unnecessarily.

This manifested as a DDC determinism issue with the PreEncodeHash when enabling shared linear encoding, where the output mip data would be the same (as the F32 conversion would round trip without change), however the input to the convertor would change between platforms.

Since Oodle is the only format that routes this, we can invalidate only this format and avoid a worldwide rebuild.

#rb charles.bloom
#preflight 638fcd007e0feab0b77ad3f3

[CL 23419050 by Dan Thompson in ue5-main branch]
2022-12-06 18:20:21 -05:00
Dan Thompson
8b4692d085 Remove "mutable" parts of the build settings. For platforms that need the mip dimensions, this is now piped down via a parameter instead of violating "const".
#rb fabian.giesen
#rb charles.bloom
#preflight 636987d7dc30a4ce96651026

[CL 23021179 by Dan Thompson in ue5-main branch]
2022-11-07 18:29:15 -05:00
Dan Thompson
24456b0b23 Shared Linear Encoding for DDC1 - disabled by default, enable by cvar (r.SharedLinearTextureEncoding 1)
#rb jeff.roberts fabian.giesen devin.doucette
#preflight 6334c333b946208fc1c4856b

[CL 22233333 by Dan Thompson in ue5-main branch]
2022-09-28 18:26:45 -04:00
Dan Thompson
b66139e721 Shared Linear Texture Encoding [DDC2] -- Separates out the platform tiling code to allow for texture builds to reuse the linear texture that gets encodes with windows.
Primary Components:
    DDC2 texture build input/output revamped to support future FDerivedData references where the bulk data remains in the Zen server during cooks.
    Tiling code is separated out in to ITextureTiler interface so that tiling can be done without calling FChildTextureFormat::CompressImage[Ex]
    Adding mip dimensions to GetMipCountForBuildSettings

#rb fabian.giesen, zousar.shaker
#preflight 6304f87f516bef57ffada18d

[CL 21511157 by Dan Thompson in ue5-main branch]
2022-08-23 12:41:58 -04:00
charles bloom
7b9fe78863 TextureFormatOodle call LogVersion to check CPU caps and don't make a TextureFormat if not supported
drops back to NVTT/ISPC legacy texture encoders
fixes textures failing to encode on old CPUs without SSE4

#rb fabian.giesen
#preflight 62bd0c89ed35ee71a7c856c7

[CL 20887958 by charles bloom in ue5-main branch]
2022-06-29 22:43:01 -04:00
charles bloom
60eb0735b4 reduce texture build memory use by freeing source images when no longer needed
#preflight 62b72389ff7f5dd87e2f5573
#rb fabian.giesen,dan.thompson

[CL 20830728 by charles bloom in ue5-main branch]
2022-06-27 10:44:18 -04:00
Dan Thompson
0c889685e3 Updating the mip packing and tiling interfaces to not require image bits. This is required to determine memory layouts for textures prior to launching texture builds.
#rb fabian.geisen
#preflight 62a90ea9943e7bb256c39717

[CL 20659876 by Dan Thompson in ue5-main branch]
2022-06-14 19:00:42 -04:00
charles bloom
83a33c6d95 TextureFormatManager better init safety
do Invalidate in your constructor so you are valid after LoadModule
in case someone tries to Load TextureFormatManager and use it other than TargetPlatform
mutex protect thread access
fixes TBW broken by previous CL on TextureFormatManager

#preflight 6269c22f4510fc7faaf8c8aa
#rb zousar.shaker

#ROBOMERGE-AUTHOR: charles.bloom
#ROBOMERGE-SOURCE: CL 19949335 via CL 19949395 via CL 19949397
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v943-19904690)

[CL 19952589 by charles bloom in ue5-main branch]
2022-04-28 02:05:06 -04:00
charles bloom
be238dee17 fix failures on texture import of rare cases
fix RHI upload of textures that are multiple of 4 in top mip but not in lower mips
dont pad CompressedImage sizes, store true size
clean up Texture size limits and VT conditions
better default settings for texture import
clean up initialization order of TextureFormatManagerModule

#preflight 6250814a11261bc7b23d8f4b
#rb fabian.giesen,julien.stjean

[CL 19693287 by charles bloom in ue5-main branch]
2022-04-08 16:06:54 -04:00
danny couture
7c705ace03 Cache texture formats instead of recreating FName from strings every call to GetDerivedTextureDataKey
#rb Matt.Peters

#ROBOMERGE-AUTHOR: danny.couture
#ROBOMERGE-SOURCE: CL 18308363 in //UE5/Release-5.0/... via CL 18308397
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18308458 by danny couture in ue5-release-engine-test branch]
2021-11-29 08:22:57 -05:00
Marc Audy
0c3be2b6ad Merge Release-Engine-Staging to Test @ CL# 18240298
[CL 18241953 by Marc Audy in ue5-release-engine-test branch]
2021-11-18 14:37:34 -05:00
aurel cordonnier
fc542f6cfd Merge from Release-Engine-Staging @ 18081189 to Release-Engine-Test
This represents UE4/Main @18073326, Release-5.0 @18081140 and Dev-PerfTest @18045971

[CL 18081471 by aurel cordonnier in ue5-release-engine-test branch]
2021-11-07 23:43:01 -05:00
aurel cordonnier
a12d56ff31 Merge from Release-Engine-Staging @ 17791557 to Release-Engine-Test
This represents UE4/Main @17774255, Release-5.0 @17791557 and Dev-PerfTest @17789485

[CL 17794212 by aurel cordonnier in ue5-release-engine-test branch]
2021-10-12 21:21:22 -04:00
devin doucette
1d45cefecb Texture: Remove the UTexture parameter from ITextureFormat::GetDerivedDataKeyString
This is necessary to support building textures independently of the UTexture, which is required by the new derived data build interface.

#rb Zousar.Shaker
#rnx
#preflight 60cbbb906092ba000158179a

#ROBOMERGE-SOURCE: CL 16714489 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v835-16672529)

[CL 16714496 by devin doucette in ue5-release-engine-test branch]
2021-06-17 18:59:40 -04:00
Zousar Shaker
35cb1325a8 -Avoid having dependency on Engine by TextureFormatOodle by avoiding use of UTexture and getting
-Add mechanism for ITextureFormat to have a generic and private "FormatSettings" block that can be global, but also exported with a texture build action and applied when a texture build is executed remotely.  Also ensure that ChildTextureFormat is able to split and store/read the format settings for Child & Base format as separate sub-items.
-Allow the PS5TextureBuildWorker to compile in Oodle if the plugin is present and enabled.

#rb charles.bloom

[CL 16406838 by Zousar Shaker in ue5-main branch]
2021-05-20 14:19:29 -04:00
Zousar Shaker
6521df7bb5 Attempt #2 (with issues fixed from last time): Extract texture format indexing and interfaces from the TargetPlatformManager and instead put it into a new type: TextureFormatManager instead. TargetPlatformManager retains the same API for querying texture format information, it just forwards to the TextureFormatManager instead. This is to facilitate the use of TextureCompressor from standalone executables that shouldn't depend on TargetPlatformManager.
#rb ben.ingram

Undo //UE5/Main/Engine/Source/... changelist 16172520

[CL 16185594 by Zousar Shaker in ue5-main branch]
2021-05-03 14:05:29 -04:00