306 Commits

Author SHA1 Message Date
adam kinge
11980dc023 Required Metal shader compiler changes to support iOS Simulator. Set to disabled by default via "bEnableSimulatorSupport" in IOSRuntimeSettings.
#jira UE-168571
#rnx
#rb carl.lloyd, jack.porter
#lockdown jack.porter

[CL 27022417 by adam kinge in 5.3 branch]
2023-08-11 00:53:13 -04:00
Joe Kirchoff
eb7171cff4 Resolve several module public include paths not using references
#rnx
#jira none

[CL 26558401 by Joe Kirchoff in 5.3 branch]
2023-07-24 18:32:36 -04:00
carl lloyd
49ba1cb166 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 26435670 by carl lloyd in 5.3 branch]
2023-07-18 11:49:30 -04:00
carl lloyd
adaff3eb8b 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 26290281 by carl lloyd in 5.3 branch]
2023-06-28 13:14:30 -04:00
axel riffard
2fded5165a Metal 3.1, iOS17 and tvOS17
#jira UE-187878
#rb adam.kinge
#review-26252912
#fyi jack.porter,  carl.lloyd,  zack.neyland,  josh.adams

[CL 26277840 by axel riffard in 5.3 branch]
2023-06-27 21:39:42 -04:00
carl lloyd
aeb3c16a16 Add support to enable an SM6 platform for Mac
#rb Zack.Neyland
#jira UE-184435

[CL 26063410 by carl lloyd in 5.3 branch]
2023-06-16 14:37:30 -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
christopher waters
20984328ea Removing the cvar lookup string for shader dead code removal in all shader formats. This cvar can't be loaded on SCW startup so it was causing a hash mismatch.
#rb yuriy.odonnell
#preflight 646bc8f764351d76f3c85f5e

[CL 25570191 by christopher waters in ue5-main branch]
2023-05-22 16:57:05 -04:00
dan elksnitis
26464b581b [shaders] further rework of parameter parser API to simplify the independent preprocessing use case, plus adding serialization support and some minor cleanup.
#preflight 6442af0ec023bb1f734fc0d1
#rb Christopher.Waters

[CL 25148947 by dan elksnitis in ue5-main branch]
2023-04-21 13:45:43 -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
3df31bd37f [shaders] deprecate FShaderCompilerEnvironment::RemoteServerData field; since backend-specific remote compile functionality was removed (see https://p4-swarm.epicgames.net/changes/13777670) this is only used for adding unnecessary ifdef'd out debug info to associated shaders.
#rb Laura.Hermanns
#preflight 642735ab486e7cce7dd5b388

[CL 24877333 by dan elksnitis in ue5-main branch]
2023-03-31 15:51:46 -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
dmitriy dyomin
bf4ed820ba Fixed: Flickering artifacts occur in the Mobile Game Project on iOS.
Make sure iOS vertex shaders are compiled with PreserveInvariance option set
#jira UE-179372
#rb jack.porter
#preflight 6412df4cd0208e8564bbb732

[CL 24671983 by dmitriy dyomin in ue5-main branch]
2023-03-16 11:40:36 -04:00
calvin zheng
9f3db54591 Update Apple metal version string format to match latest
#rb Carl.Lloyd, Zack.Neyland
#preflight 640a46ab482188d710be6062

[CL 24581974 by calvin zheng in ue5-main branch]
2023-03-09 16:06:24 -05:00
calvin zheng
a83747d71a Reducing metal version check in shader cache key to major version only, this will reduce shader compiling time on user machines with a different Xcode version.
Repurpose XcodeVersionInShaderVersion into UseFullMetalVersionInShaderVersion, setting this to true will force shaders to rebuild for each new Xcode version (reverting to previous behaviour)

#jira UE-179011
#rb Zack.Neyland, Arciel.Rekman, Carl.Lloyd
#lockdown Rolando.Caloca
#preflight 6402755daa00423335e22d0f

[CL 24525802 by calvin zheng in ue5-main branch]
2023-03-06 13:21:17 -05: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
Yuriy ODonnell
1dfc32d42d Enable r.Shaders.RemoveDeadCode by default for all back-ends except Metal and OpenGL
* Significantly reduces the size of shader debug data and improves shader compilation time (reducing parsing cost in the native shader compiler)
* Remove "experimental" label for the feature

#rb Jason.Nadro
#preflight 63d455d9be1970f8824c3f9b

[CL 23894592 by Yuriy ODonnell in ue5-main branch]
2023-01-27 18:24:18 -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
Wei Liu
e9b19b0a8e Fix a crash in FShaderCode::GetWriteAccess when r.Shaders.ExtraData=1 on mac.
#jira none

#rb Dmitriy.Dyomin, Carl.Lloyd
#preflight 63b8b79c763c6c10646417f1

[CL 23605837 by Wei Liu in ue5-main branch]
2023-01-06 19:27:11 -05:00
Yuriy ODonnell
bddca76c94 ShaderMinifier - Add support for dead code removal to all shader formats
* Add code to all shader format back-ends to take dead code removal into account when computing the version ID
* Not enabled in Metal and OpenGL back-ends (require further testing)

#rb dan.elksnitis
#preflight 6390f1f15c5308d18c7364fb

[CL 23433448 by Yuriy ODonnell in ue5-main branch]
2022-12-07 15:13:42 -05:00
christopher waters
b986207a34 Moving some RHI types into their own headers:
- DataDrivenShaderPlatformInfo
- ERHIFeatureLevel
- EShaderPlatform

#rb florin.pascu
#preflight 638589464004f73f629ee0b0

[CL 23314007 by christopher waters in ue5-main branch]
2022-11-29 13:36:02 -05:00
zack neyland
0eeb3732f1 Various misc fixes for Mac.
* Sets the Min/Max Wave Size
* Handles Vulkan headers and Mac a bit better
* Handles missing [shader] toolchains a bit better.

#preflight 63603e161622fbf582db4e07
#jira na

[CL 22920245 by zack neyland in ue5-main branch]
2022-11-02 13:10:22 -04:00
dan elksnitis
ecab3b4a9a [shaders] refactor usf/directcompile.txt dump into a utility in ShaderCompilerCommon to reduce code duplication in the shader backends
#rb Jason.Nadro
#rb Christopher.Waters
#preflight 635bf1e1df01edd149f5727e

[CL 22829548 by dan elksnitis in ue5-main branch]
2022-10-28 11:45:49 -04:00