Commit Graph

76 Commits

Author SHA1 Message Date
dan elksnitis
f2c9000b60 [shaders] deprecate GetDefinitions accessor on FShaderCompilerEnvironment; encapsulate internal usage of definitions object in friend classes and remove some superfluous code calling the function unnecessarily
#preflight 6425b46391589478cdab0c35
#rb Laura.Hermanns
#rb Sameer.Mirza

[CL 24870640 by dan elksnitis in ue5-main branch]
2023-03-31 09:55:19 -04:00
Matt Peters
6be2b0412d ShaderPreprocessor: Fix access violation due to reading off the end of the input text when the text contains an unterminated /* comment.
#jira UE-178273
#rnx
#rb charles.derousiers
#preflight 63f79630ef1b24bf940b32e0

[CL 24382270 by Matt Peters in ue5-main branch]
2023-02-23 11:44:33 -05:00
Joe Kirchoff
4d1c3ab0b8 Disable sndbs distribution for ShaderPreprocessor module
#rnx
#rb trivial
#preflight 63e41634ea7ad6869835614b

[CL 24083177 by Joe Kirchoff in ue5-main branch]
2023-02-08 16:42:12 -05:00
Jeremy Moore
3e7f174035 STB processor reemits line directives.
#preflight 63c838c902024f93d8dc9534

[CL 23760433 by Jeremy Moore in ue5-main branch]
2023-01-18 13:37:36 -05:00
dan elksnitis
e5d2976d39 [shaders] fix msvc static analysis warning - enforce that loaded includes are non-empty when loading via stb file load callback.
#rb Yuriy.ODonnell
#preflight 6388f525303395f6c93adb67

[CL 23357182 by dan elksnitis in ue5-main branch]
2022-12-01 14:02:18 -05:00
dan elksnitis
93c67debf3 [shaders] move stb_ds and stb_alloc implementations to a .c file rather than using the single-header #define'd implementation pattern. IncludeTool doesn't like this.
#preflight 6388cb61cb3b75418301b20a
#rb Yuriy.ODonnell

[CL 23353516 by dan elksnitis in ue5-main branch]
2022-12-01 11:15:26 -05:00
dan elksnitis
8801f83bb2 [shaders] add support to run STB preprocessor instead of MCPP; add a cvar to disable this and instead use the legacy preprocessor (currently this is set to true - i.e. still using MCPP - by default)
#rb Yuriy.ODonnell
#rb Jason.Nadro
#preflight 6387663c3377450900c5522b

[CL 23350844 by dan elksnitis in ue5-main branch]
2022-12-01 09:27:13 -05:00
dan elksnitis
7be75b5184 [shaders] fix missing closing " in stb header error msg (this path should not be hit but it's causing problems for IncludeTool static analyzer)
#rb trivial
#preflight none

[CL 23310769 by dan elksnitis in ue5-main branch]
2022-11-29 11:44:01 -05:00
dan elksnitis
4803fda014 [stb_preprocess]
- add handling of #pragma directives in macro definitions
- add handling of #pragma message to create diagnostic outputs
- add and update comments in preprocessor.h
- unifying memory allocation mechanisms between stb_ds, stb_alloc and preprocessor - allow configuring all functions performing memory allocation/freeing via macros which should be specified via a header whose include path is specified via the STB_CONFIG macro (this will be included in stb_common.h if defined)
- don't pass an stb_arena to the include resolution callback; this is unnecessary complexity (implementation can handle its own memory allocation as long as the resulting strings have the appropriate lifetime) and indeed the arena used was global (and so not threadsafe)
- expose function allowing external modification of error modes so we can disable the error case for preprocessor directives not being at the start of a line (and so handle the case where we #define a macro whose value is a #pragma, or any other string possibly containing a # that we want to pass unmodified to the output i.e. the case of #define COMPILER_DEFINE #define which we use to keep #defines in the preprocessed code for handling by the platform compilers)
- fix leak of pp diagnostic messages
- remove internal caches for include resolution; they are problematic since (a) they aren't threadsafe, and (b) the caching of resolved filenames based on the include path found in source is inherently problematic (can potentially cause issues with same-named files in different folders included via relative paths)
- strip all code related to explicit file loading and lists of include paths; this has no purpose for our use case. note this makes the callbacks for file load/unload and include resolve mandatory, comments in preprocessor.h updated to reflect this.
- fix a few other memory leaks

#preflight 638611a9fa053c489a54b2ec
#rb Yuriy.ODonnell

[CL 23305324 by dan elksnitis in ue5-main branch]
2022-11-29 09:34:03 -05:00
dan elksnitis
6aa37eca15 [shaders] additions & fixes to STB preprocessor for shader preprocessing. With the following all Lyra shaders compile and generate identical bytecode on PC SM5/6.
- add explicit extern "C" on preprocessor methods to allow linking from C++ code
- add custom callbacks for include path resolution and file loading/unloading
- add padding space following macro expansion ending with a > to work around DXC bug (not handling >> correctly if it occurs at the end of a templated type)
- adding explicit handling for HLSL infinity constant (1.#INF); the # character outside of a directive was previously putting the preprocessor into an error state
- change line directive output to use #line format rather than # (DXC is ok with the latter but minifier doesn't currently handle it), and also always include the filename (so when minifying don't have to be careful not to strip the line directive with the filename in it); this also matches mcpp behaviour
- adding const-correctness and casts where needed to avoid const casts/compile errors in calling C++ code and satisfy Mac/Intellisense compilers
- bugfix: parsing of '.' was immediately putting the scanning state machine into "number" mode resulting in skipped macro expansion in code of the form "var.MACRO.var2"/numbers; added extra state transitions and changing the default transition when encountering '.' to an explicit mode that can allow either transitioning to parsing identifiers or numbers depending on following characters.
- bugfix: macros with an empty parameter list were incorrectly terminating said list on expansion (adding extra rparens)
- bugfix: set file load mode as "callback" when callback used for loading, and check the mode in the free callbacks
- various minor changes to satisfy Clang code analysis

#preflight 637e3391e30d438849ddf902
#rb Yuriy.ODonnell

[CL 23249332 by dan elksnitis in ue5-main branch]
2022-11-23 09:58:24 -05:00
dan elksnitis
e01c10c613 [shaders] resubmit stb preprocessor code with static analysis fixes
#rb Jason.Nadro
#preflight 636d54ab1a66e7f73189e89f

[CL 23134601 by dan elksnitis in ue5-main branch]
2022-11-15 08:26:32 -05:00
florin pascu
a945c1e0cb Remove ShaderPlatformToShaderFormatName
#rb Jason.Nadro, Jeremy.Moore
#preflight 637216e13248425305d19318

[CL 23116618 by florin pascu in ue5-main branch]
2022-11-14 07:59:15 -05:00
dan elksnitis
3e268dcee4 [shaders] remove stb preprocessor code until static analysis errors can be addressed.
#rb trivial
#preflight skip

[CL 23057245 by dan elksnitis in ue5-main branch]
2022-11-09 12:33:30 -05:00
dan elksnitis
5e65aad0e3 [shaders] add initial version of stb preprocessor, using default data structure and alloc implementations (for now)
#preflight 636aa686f56cab38c7373c9f
#rb Jason.Nadro

[CL 23053497 by dan elksnitis in ue5-main branch]
2022-11-09 09:03:42 -05:00
christopher waters
c6e9015a91 Cache uniform buffer definitions
- Remove shader platform specific info from uniform buffers, we can generate code with macros that translates to what each platform needs.
- With the per-platform differences removed, uniform buffer declarations (read: generated text) can be created once per shader parameter type that needs them instead of once per shader type's shader parameter type usage.
- FShaderType and FVertexFactoryType now hold a TSet of used uniform buffer names instead of a TMap that held potentially duplicated FStrings of uniform buffer defintions.
- Lists of uniform buffers are *potentially* different per platform, so the annoying CachedUniformBufferPlatform variables need to stick around for now.
- GenerateReferencedUniformBuffers renamed to GenerateReferencedUniformBufferNames and now populates a TSet instead of a TMap.
- ShaderType::AddReferencedUniformBufferIncludes renamed to ShaderType::AddUniformBufferIncludesToEnvironment which calls the shared UE::ShaderParameters::AddUniformBufferIncludesToEnvironment.
- CreateUniformBufferShaderDeclaration moved to UE::ShaderParameters::CreateUniformBufferShaderDeclaration and now returns its FString.
- CacheUniformBufferIncludes was removed since it was only populated values from CreateUniformBufferShaderDeclaration.
- Deprecated FShaderCompilerInput::SourceFilePrefix since nothing has populated it in 9 years.

#jira none
#rb dan.elksnitis, yuriy.odonnell
#preflight 63643e5ff233f06a127c11c1

[CL 22988611 by christopher waters in ue5-main branch]
2022-11-04 12:04:48 -04:00
bryan sefcik
892629fe83 Fixed some paths that got updated to include the full "ThirdParty" path.
#jira
#preflight 6320877bbc40358fa2995069

[CL 21997782 by bryan sefcik in ue5-main branch]
2022-09-13 21:48:33 -04:00
bryan sefcik
a3dddc6630 Pass 1 on Developer include fixes:
Removed redundant private include paths from build.cs files.
Fixed include paths to be relative to the private or public folders.
Hid or removed includes that reached into other private module folders.
Updated PublicInclude paths when necessary.

#jira
#preflight 631e281694758d0bf2ea1399

[CL 21960082 by bryan sefcik in ue5-main branch]
2022-09-11 18:32:18 -04:00
bryan sefcik
de1956f47b Ran IWYU on Public headers under Engine/Source/Developer/...
Headers are updated to contain any missing #includes needed to compile and #includes are sorted.  Nothing is removed.

#ushell-cherrypick of 21064294 by bryan.sefcik
#jira
#preflight 62d5c2111062f2e63015e598

#ROBOMERGE-OWNER: bryan.sefcik
#ROBOMERGE-AUTHOR: bryan.sefcik
#ROBOMERGE-SOURCE: CL 21155249 via CL 21158121 via CL 21161259
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)

[CL 21182053 by bryan sefcik in ue5-main branch]
2022-07-20 12:03:45 -04:00
Florin Pascu
f64fc575d2 Re-submiting with Mac fixes
Changed ShaderArchive, GlobalShaderCache, ShaderDebugInfo and Autogen to use ShaderPlatformName and not ShaderFormat when naming their output files.
#rb Jack.Porter, Chris.Waters, Mihnea.Balta, Jason.Nadro
#jira UE-120561
#preflight 62c31f6fc9410537282296c6

[CL 20937870 by Florin Pascu in ue5-main branch]
2022-07-04 19:06:33 -04:00
Florin Pascu
09cb19fcfd Backout 20871665 to fix Mac cook
#rb none
#jira none
#preflight 62be0c68d94b57687c3ff309

[CL 20904999 by Florin Pascu in ue5-main branch]
2022-06-30 17:41:55 -04:00
Florin Pascu
1844e8e514 Changed ShaderArchive, GlobalShaderCache, ShaderDebugInfo and Autogen to use ShaderPlatformName and not ShaderFormat when naming their output files.
#rb Jack.Porter, Chris.Waters, Mihnea.Balta, Jason.Nadro
#jira UE-120561
#preflight 62bbf93ae353c20ac2361d94

[CL 20871665 by Florin Pascu in ue5-main branch]
2022-06-29 04:19:06 -04:00
Jason Nadro
65a90154a6 Add scoped cpu markers to various D3D shader compiler functions to make this easier to profile when shader compilation is done in process.
#rb trivial
#jira none
#preflight 62389f8fec68595f3b78e9df

[CL 19453136 by Jason Nadro in ue5-main branch]
2022-03-21 12:17:22 -04:00
Lukas Hermanns
39181ee030 Undo //UE5/Main/Engine/Source/... changelist 17355504
#fyi Krzysztof.Narkowicz, Rolando.Caloca, Mihnea.Balta
#jira none
#rnx

[CL 17408288 by Lukas Hermanns in ue5-main branch]
2021-09-02 16:05:32 -04:00
Lukas Hermanns
42015c8185 Ensure escape characters are encoded correctly in '#line'-directives of shader preprocessor.
#rb Krzysztof.Narkowicz
#jira none
#rnx

[CL 17377839 by Lukas Hermanns in ue5-main branch]
2021-08-31 17:10:04 -04:00
Lukas Hermanns
83d05953f7 Enable '-fdiagnostics-format' option in DXC and emit asbolute file paths in '#line'-directives.
#rb Krzysztof.Narkowicz
#fyi Rolando.Caloca, Mihnea.Balta
#jira none
#rnx

[CL 17355504 by Lukas Hermanns in ue5-main branch]
2021-08-30 14:04:53 -04:00