Commit Graph

101 Commits

Author SHA1 Message Date
dan elksnitis
cc7c2c54f4 [shaders] shader format preprocessing cleanup & refactoring
- move uniform buffer cleanup and dead stripping into ShaderPreprocessor module's PreprocessShader function
- add "required symbols" to compiler input struct to specify additional symbols to keep during minification aside from those specified by the entrypoint; modify API such that both an entry point string and additional symbols can be specified (to avoid each backend needing to manually parse the compound RT entry point string)
- make use of ModifyShaderCompilerInput in all backends to set additional defines and required symbols on input struct up front; only use the AdditionalDefines map in cases where it's actually necessary
- remove the various per-platform defines for enabling minifier, no longer required now that this has been rolled out for all backends
- fix SCW directcompile mode; this had rotted due to pieces of the FShaderCompilerEnvironment having been added that weren't explicitly serialized to either cmdline or in the shader source. this now serializes as a base64 string written inside the USF containing all portions of the environment required for compilation (using the same serialization function as is used to write/read the SCW input file)
- use a debug flag for indicating we're in "direct compile" mode and should load the debug USF off disk, rather than the poorly named "bSkipPreprocessedCache" (this name is both inaccurate and also confusing due to the addition of the preprocessed job cache)
- modify platform "force wave32" mechanism to use a pragma directive to set a compiler define, instead of doing string replacement in the preprocessed source
- add a view version of the RT entrypoint parsing to use in preprocessing, note that other paths still need to construct fstrings due to further manipulation so keeping the FString path around too
- clean up backends manually checking the "directcompile" cmdline arg

#rb christopher.waters, Yuriy.ODonnell
#rb Chris.Waters
#rb Laura.Hermanns

[CL 30023082 by dan elksnitis in ue5-main branch]
2023-11-30 15:56:34 -05:00
carl lloyd
802f14d2bf Change Texture2DArray's to flatten by texture name instead of using shader names.
#rb jeannoe.morissette

[CL 27823019 by carl lloyd in ue5-main branch]
2023-09-13 05:09:45 -04:00
dan elksnitis
df634c7352 [shaders] metal shader format: enable minifier and migrate to independent preprocessing API
#rb Laura.Hermanns

[CL 27631995 by dan elksnitis in ue5-main branch]
2023-09-06 09:24:57 -04:00
dan elksnitis
9a5a1b6f74 [shaders] minor include cleanup
#rb Jason.Hoerner
#rb Laura.Hermanns

[CL 26817718 by dan elksnitis in ue5-main branch]
2023-08-03 13:40:32 -04:00
dan elksnitis
5f85b46590 [shaders] remove unnecessary passing of hlslcc flags as an option to debug info output. this was just used to pass a switch on the SCW directcompile cmdline which SCW no longer does anything with. also cleaned up some additional unnecessary code related to these flags in backends that no longer use hlslcc at all.
#rb Laura.Hermanns

[CL 26685354 by dan elksnitis in ue5-main branch]
2023-07-28 15:58:01 -04:00
jason hoerner
7f22080814 Shader Compiler: Made FShaderCompilerDefinitions private, to reduce code publicly visible in ShaderCore.h. For now, it's just marked deprecated for 5.4, but will be hidden more generally in 5.5.
#rnx
#rb yuriy.odonnell dan.elksnitis jason.nadro

[CL 26534998 by jason hoerner in ue5-main branch]
2023-07-22 06:35:10 -04:00
carl lloyd
cb320ed6b4 Fixed bug where arrays were flattened when not using SM6, also marked SM6 as experimental
Enabled distance fields for the desktop renderer on iOS

#jira UE-190249

[CL 26436063 by carl lloyd in ue5-main branch]
2023-07-18 12:01:11 -04:00
carl lloyd
c42df3f2f9 Fixes for Nanite on Mac
- Disable COMPILER_SUPPORTS_WAVE_VOTE for Mac
- Fixed bug where Texture2DArray was flattened due to atomics, but bound as Texture2D
- Fixed bug where defines were read incorrectly in shader compiler

#rb Zack.Neyland, Jamie.Hayes

[CL 26291315 by carl lloyd in ue5-main branch]
2023-06-28 13:49:35 -04:00
axel riffard
de98664667 Metal 3.1, iOS17 and tvOS17
#jira UE-187878
#rb adam.kinge
[FYI] jack.porter,  carl.lloyd,  zack.neyland,  josh.adams

[CL 26277868 by axel riffard in ue5-main branch]
2023-06-27 21:41:51 -04:00
carl lloyd
a793c2fcd1 Add support to enable an SM6 platform for Mac
#rb Zack.Neyland
#jira UE-184435

[CL 26062749 by carl lloyd in ue5-main branch]
2023-06-16 14:24:06 -04:00
jason hoerner
88d847a0ad GlobalBeginCompileShader optimizations. 3.2x improvement in performance of the function on Lyra cook:
* Early out when adding uniform buffer resource entries, by checking if uniform buffer had been processed, before processing individual entries.
* Changed resource entry list from a map to an array, saving the cost of map operations adding items to it.
* Resource entries for global uniform buffers cached once at startup.
* Resource entry member names stored in an external buffer, to avoid per-entry string memory allocation overhead.
* Miscellaneous smaller optimizations -- for example, using ByHash to avoid redundant hashing and FString construction.

#jira none
#rnx
#rb jason.nadro dan.elksnitis
#preflight 646cfdbc1134ffac7034af60

[CL 25596308 by jason hoerner in ue5-main branch]
2023-05-23 20:16:11 -04:00
Luke Thatcher
e6b40d3954 Major refactor of RHICreateShaderResourceView and RHICreateUnorderedAccessView functions - Merging //UE5/Dev-ParallelRendering (up to CL 24988990) to //UE5/Main
This changelist is a merge of work done in //UE5/Dev-ParallelRendering to remove tech debt in the SRV/UAV create functions. See individual changelist descriptions in that stream for further details, but a summary of the change is as follows:
 - We had multiple overloads of each of the RHICreateShaderResourceView and RHICreateUnorderedAccessView functions. Each function had a different set of supported view types and using them was complicated / ambiguous.
 - There's now only 2 create functions, and a common FRHIViewDesc descriptor struct, which is stored on the base view class.

 - FRHIView takes a reference on the underlying resource, ensuring that RHI views keep their viewed resource alive. This was not the case on some platforms, since it was previously the platform RHI implementation's responsibility.
 - Platform RHI implementations resolve an FRHIViewDesc into a full FViewInfo struct using GetViewInfo. This centralizes the logic for computing num mips / num slices / format etc so it is the same across all platforms.

 - Views must never be created with nullptr resources. This used to happen in the mesh streamer, but now all views require a real underlying resource. That resource can be a "BUF_NullResource" buffer, which is what the mesh streamer uses as a placeholder for buffers that have not streamed yet.
 - We will eventually replace FRHITextureReference with a "null texture", similar to how BUF_NullResource works for buffers. This is not yet implemented, so there is no "null view" of a texture currently.

#rb kenzo.terelst,jeannoe.morissette,dmitriy.dyomin
#preflight 643534642855180717af410e
#jira none

[CL 24989901 by Luke Thatcher in ue5-main branch]
2023-04-11 08:59:21 -04:00
zack neyland
be4e1f0887 Metal: Add experimental Nanite support for M2 based devices.
#jira UE-182683
#preflight https://horde.devtools.epicgames.com/job/64309adf2855180717cd4332
#rb Josh.Adams
#p4v-cherrypick 24968466

[CL 24972129 by zack neyland in ue5-main branch]
2023-04-07 19:00:54 -04:00
dan elksnitis
49d7985a85 [shaders] Add "compile argument" functionality for generic parameters consumed by compile backends, along with helper to set both a compile arg AND define for cases which require both. The purpose of this is to move towards enforcing that preprocessor defines should _only_ be used during the preprocessing phase itself; the subset of defines that are currently used only as arguments to the compile backends (or used as both actual preprocessor defines and backend arguments) should use this mechanism instead. This allows us to explicitly identify and hash such parameters to be included in a stable key based primarily on a hash of preprocessed/deadstripped source; without it we would need to hash all defines which will defeat most of the deduplication benefit of doing this. A subsequent change will deprecate the GetDefinitions function on the shader compilation environment to enforce that defines cannot be read by anything outside of core shader system functionality.
#rb Massimo.Tristano
#rb Laura.Hermanns
#preflight 64258c2e5e52099fe3d03625

[CL 24854110 by dan elksnitis in ue5-main branch]
2023-03-30 10:47:09 -04:00
devin doucette
5f370d9b86 Fixed static analysis warnings exposed by the log macro refactor
#jira none
#preflight 63fcd0adc35a141980f70d99
#rb Zousar.Shaker
#rnx
#lockdown zousar.shaker

[CL 24425468 by devin doucette in ue5-main branch]
2023-02-27 12:00:24 -05:00
Laura Hermanns
5a8a3b3063 Unify shader debug name in shader code output for DXC backends to improve cache hits.
The shader code output contains a little bit of plaintext such as I/O identifiers and the shader name, which was generated for the DXC backend in a way that prevents caching.
This unifies the shader name in the output code and improves the cache hit ratio for a Lyra cook from 0% to roughly 50% cache hits (for certain platforms).

#rb Jason.Nadro, Carl.Lloyd
#fyi Brian.White, Arciel.Rekman, Brandon.Schaefer
#jira FORT-548603
#preflight 63e26c6c07207b2570ba2d5b
#rnx

[CL 24050212 by Laura Hermanns in ue5-main branch]
2023-02-07 11:15:47 -05:00
zack neyland
e8eb20415f MetalRT: Laying initial groundwork, disabled by default.
* Enabling requires re-building a metalpp with appropriate flags/defines set along with an OS version that supports the RT headers/libs.

#preflight 63c72f1a0225f00e14c05c46
#jira none

[CL 23750025 by zack neyland in ue5-main branch]
2023-01-17 19:53:36 -05:00
richard wallis
8d24dcd6ee Add -fpreserve-invariance for Vertex shaders for Metal versions above 2.2. macOS only: Reinstate Metal versions 2.2 and 2.3 to work round what appears to be a M1 position invariance compiler bug.
#jira UE-164360
#preflight 63443b667045f13c96bda936
[REVIEW] [at]zack.neyland, [at]axel.riffard, [at]jack.porter, [at]adam.kinge

[CL 22509223 by richard wallis in ue5-main branch]
2022-10-13 14:40:48 -04:00
axel riffard
c64aa2de93 Catalina, iOS 14 removal
Metal 2.3 removed, Metal 3.0 added for Mac

#jira UE-163352
#rb adam.kinge bertrand.carre
#preflight 631ea7eb94758d0bf2008668

[CL 21960671 by axel riffard in ue5-main branch]
2022-09-11 23:47:08 -04:00
axel riffard
494b98c831 Remove Catalina support and Metal 2.2 from Mac.
#jira UE-149923
#rb jack.porter
#preflight 6315c60bf448dc6e58121822

[CL 21790515 by axel riffard in ue5-main branch]
2022-09-05 06:05:22 -04:00
Richard Wallis
5f67dcf13c Apply patch from Apple. Enable WaveOps for macOS - tested on Vega 56 Monterey 12.5.1
#jira none
#rnx
#preflight 6310b4d7ea685939704c090a
#review-21739599 @zack.Neyland
#rb zack.Neyland

[CL 21756741 by Richard Wallis in ue5-main branch]
2022-09-02 04:26:05 -04:00
Laura Hermanns
bbb62728d4 Strip [[clang::optnone]] attribute from Metal shaders due to performance hit with WPO on M1 Macs.
#rb Will.Damon
#fyi MarcAndre.Lalonde
#jira none
#preflight 62f56422f3107c023cc15341
#rnx

[CL 21344324 by Laura Hermanns in ue5-main branch]
2022-08-11 16:27:00 -04:00
axel riffard
8e78f187b8 ios 16, tvos 16 and metal 3.0 implementation
#jira UE-156821
#rb jack.porter
#fyi will.damon
#preflight 62b959ec5d29d0d10a8e9497

[CL 20828293 by axel riffard in ue5-main branch]
2022-06-27 04:12:37 -04:00
carl lloyd
4b6434cac6 Fix for Apple A8 device support
- Devices crashing when using Base_Vertex metal shader semantics
  - Runtime error when using Virtual Texturing on A8 devices which is unsupported.

#jira UE-131863, UE-132217
#rb Will.Damon
[FYI] Jack.Porter
#preflight 62a75ad63d0a713cf8caf486

#ROBOMERGE-AUTHOR: carl.lloyd
#ROBOMERGE-SOURCE: CL 20631592 in //UE5/Release-5.0/... via CL 20649245
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v955-20579017)

[CL 20656300 by carl lloyd in ue5-main branch]
2022-06-14 16:23:13 -04:00
carl lloyd
9bc1cec538 Enabling half precision floating point for Metal on iOS/tvOS
#rb Dmitriy.Dyomin, Laura.Hermanns
#jira UE-120588
#preflight 624c3b06f4217035fac65500

[CL 19626453 by carl lloyd in ue5-main branch]
2022-04-05 11:51:04 -04:00