2019-12-26 14:45:42 -05:00
// Copyright Epic Games, Inc. All Rights Reserved.
2014-03-14 14:13:41 -04:00
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
# include "PostProcess/PostProcessEyeAdaptation.h"
2019-06-11 18:27:07 -04:00
# include "RHIGPUReadback.h"
2020-09-24 00:43:27 -04:00
# include "RendererUtils.h"
# include "ScenePrivate.h"
2019-09-03 19:19:28 -04:00
# include "Curves/CurveFloat.h"
2014-03-14 14:13:41 -04:00
2020-02-12 13:27:19 -05:00
bool IsMobileEyeAdaptationEnabled ( const FViewInfo & View ) ;
2019-08-13 16:12:20 -04:00
namespace
{
2020-09-24 00:43:27 -04:00
TAutoConsoleVariable < float > CVarEyeAdaptationPreExposureOverride (
TEXT ( " r.EyeAdaptation.PreExposureOverride " ) ,
0 ,
TEXT ( " Overide the scene pre-exposure by a custom value. \n " )
TEXT ( " = 0 : No override \n " )
TEXT ( " > 0 : Override PreExposure \n " ) ,
ECVF_RenderThreadSafe ) ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
2020-09-24 00:43:27 -04:00
TAutoConsoleVariable < int32 > CVarEyeAdaptationMethodOverride (
TEXT ( " r.EyeAdaptation.MethodOverride " ) ,
- 1 ,
TEXT ( " Override the camera metering method set in post processing volumes \n " )
TEXT ( " -2: override with custom settings (for testing Basic Mode) \n " )
TEXT ( " -1: no override \n " )
TEXT ( " 1: Auto Histogram-based \n " )
TEXT ( " 2: Auto Basic \n " )
TEXT ( " 3: Manual " ) ,
ECVF_Scalability | ECVF_RenderThreadSafe ) ;
2016-01-27 07:18:43 -05:00
2020-09-24 00:43:27 -04:00
TAutoConsoleVariable < int32 > CVarEyeAdaptationBasicCompute (
TEXT ( " r.EyeAdaptation.Basic.Compute " ) ,
1 ,
TEXT ( " Use Pixel or Compute Shader to compute the basic eye adaptation. \n " )
TEXT ( " = 0 : Pixel Shader \n " )
TEXT ( " > 0 : Compute Shader (default) \n " ) ,
ECVF_Scalability | ECVF_RenderThreadSafe ) ;
2019-04-22 11:46:24 -04:00
2020-09-24 00:43:27 -04:00
TAutoConsoleVariable < float > CVarEyeAdaptationExponentialTransitionDistance (
TEXT ( " r.EyeAdaptation.ExponentialTransitionDistance " ) ,
1.5 ,
TEXT ( " The auto exposure moves linearly, but when it gets ExponentialTransitionDistance F-stops away from the \n " )
TEXT ( " target exposure it switches to as slower exponential function. \n " ) ,
ECVF_RenderThreadSafe ) ;
2020-01-24 18:07:01 -05:00
2020-09-24 00:43:27 -04:00
TAutoConsoleVariable < int > CVarEyeAdaptationVisualizeDebugType (
TEXT ( " r.EyeAdaptation.VisualizeDebugType " ) ,
0 ,
TEXT ( " When enabling Show->Visualize->HDR (Eye Adaptation) is enabled, this flag controls the scene color. \n " )
TEXT ( " 0: Scene Color after tonemapping (default). \n " )
TEXT ( " 1: Histogram Debug \n " ) ,
ECVF_RenderThreadSafe ) ;
2020-01-24 18:07:01 -05:00
2020-09-24 00:43:27 -04:00
TAutoConsoleVariable < float > CVarEyeAdaptationLensAttenuation (
TEXT ( " r.EyeAdaptation.LensAttenuation " ) ,
0.78 ,
TEXT ( " The camera lens attenuation (q). Set this number to 0.78 for lighting to be unitless (1.0cd/m^2 becomes 1.0 at EV100) or 0.65 to match previous versions (1.0cd/m^2 becomes 1.2 at EV100). " ) ,
ECVF_RenderThreadSafe ) ;
2020-01-24 18:07:01 -05:00
2020-09-24 00:43:27 -04:00
TAutoConsoleVariable < float > CVarEyeAdaptationBlackHistogramBucketInfluence (
TEXT ( " r.EyeAdaptation.BlackHistogramBucketInfluence " ) ,
0.0 ,
TEXT ( " This parameter controls how much weight to apply to completely dark 0.0 values in the exposure histogram. \n " )
TEXT ( " When set to 1.0, fully dark pixels will accumulate normally, whereas when set to 0.0 fully dark pixels \n " )
TEXT ( " will have no influence. \n " ) ,
ECVF_RenderThreadSafe ) ;
2021-08-03 11:56:47 -04:00
}
2020-02-12 13:27:19 -05:00
2021-08-03 11:56:47 -04:00
// Basic eye adaptation is supported everywhere except mobile when MobileHDR is disabled
static ERHIFeatureLevel : : Type GetBasicEyeAdaptationMinFeatureLevel ( )
{
return IsMobileHDR ( ) ? ERHIFeatureLevel : : ES3_1 : ERHIFeatureLevel : : SM5 ;
2019-08-13 16:12:20 -04:00
}
2019-08-21 17:40:10 -04:00
2019-08-13 16:12:20 -04:00
bool IsAutoExposureMethodSupported ( ERHIFeatureLevel : : Type FeatureLevel , EAutoExposureMethod AutoExposureMethodId )
{
switch ( AutoExposureMethodId )
{
case EAutoExposureMethod : : AEM_Histogram :
case EAutoExposureMethod : : AEM_Basic :
2021-08-03 11:56:47 -04:00
return FeatureLevel > ERHIFeatureLevel : : ES3_1 | | IsMobileHDR ( ) ;
2019-08-13 16:12:20 -04:00
case EAutoExposureMethod : : AEM_Manual :
2021-06-21 09:22:12 -04:00
return true ;
2019-08-13 16:12:20 -04:00
}
return false ;
}
2019-08-21 17:40:10 -04:00
2020-01-24 18:07:01 -05:00
bool IsExtendLuminanceRangeEnabled ( )
{
static const auto VarDefaultAutoExposureExtendDefaultLuminanceRange = IConsoleManager : : Get ( ) . FindTConsoleVariableDataInt ( TEXT ( " r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange " ) ) ;
return VarDefaultAutoExposureExtendDefaultLuminanceRange - > GetValueOnRenderThread ( ) = = 1 ;
}
2022-02-21 04:57:39 -05:00
static EAutoExposureMethod ApplyEyeAdaptationQuality ( EAutoExposureMethod AutoExposureMethod )
{
static const auto CVarEyeAdaptationQuality = IConsoleManager : : Get ( ) . FindTConsoleVariableDataInt ( TEXT ( " r.EyeAdaptationQuality " ) ) ;
const int32 EyeAdaptationQuality = CVarEyeAdaptationQuality - > GetValueOnRenderThread ( ) ;
if ( AutoExposureMethod ! = EAutoExposureMethod : : AEM_Manual )
{
if ( EyeAdaptationQuality = = 1 )
{
// Clamp current method to AEM_Basic
AutoExposureMethod = EAutoExposureMethod : : AEM_Basic ;
}
}
return AutoExposureMethod ;
}
2020-01-24 18:07:01 -05:00
float LuminanceMaxFromLensAttenuation ( )
{
const bool bExtendedLuminanceRange = IsExtendLuminanceRangeEnabled ( ) ;
float LensAttenuation = CVarEyeAdaptationLensAttenuation . GetValueOnRenderThread ( ) ;
// 78 is defined in the ISO 12232:2006 standard.
const float kISOSaturationSpeedConstant = 0.78f ;
const float LuminanceMax = kISOSaturationSpeedConstant / FMath : : Max < float > ( LensAttenuation , .01f ) ;
2020-09-24 00:43:27 -04:00
2020-01-24 18:07:01 -05:00
// if we do not have luminance range extended, the math is hardcoded to 1.0 scale.
return bExtendedLuminanceRange ? LuminanceMax : 1.0f ;
}
2019-08-13 16:12:20 -04:00
// Query the view for the auto exposure method, and allow for CVar override.
EAutoExposureMethod GetAutoExposureMethod ( const FViewInfo & View )
{
2019-09-03 19:19:28 -04:00
EAutoExposureMethod AutoExposureMethod = View . FinalPostProcessSettings . AutoExposureMethod ;
2021-08-03 11:56:47 -04:00
// Fallback to basic (or manual) if the requested mode is not supported by the feature level.
2019-09-03 19:19:28 -04:00
if ( ! IsAutoExposureMethodSupported ( View . GetFeatureLevel ( ) , AutoExposureMethod ) )
{
2021-08-03 11:56:47 -04:00
AutoExposureMethod = IsAutoExposureMethodSupported ( View . GetFeatureLevel ( ) , EAutoExposureMethod : : AEM_Basic ) ? EAutoExposureMethod : : AEM_Basic : EAutoExposureMethod : : AEM_Manual ;
2019-09-03 19:19:28 -04:00
}
2019-08-13 16:12:20 -04:00
2022-02-21 04:57:39 -05:00
// Apply quality settings
AutoExposureMethod = ApplyEyeAdaptationQuality ( AutoExposureMethod ) ;
2019-08-13 16:12:20 -04:00
const int32 EyeOverride = CVarEyeAdaptationMethodOverride . GetValueOnRenderThread ( ) ;
2019-09-03 19:19:28 -04:00
EAutoExposureMethod OverrideAutoExposureMethod = AutoExposureMethod ;
2019-08-13 16:12:20 -04:00
if ( EyeOverride > = 0 )
{
// Additional branching for override.
switch ( EyeOverride )
{
case 1 :
{
2019-09-03 19:19:28 -04:00
OverrideAutoExposureMethod = EAutoExposureMethod : : AEM_Histogram ;
2019-08-13 16:12:20 -04:00
break ;
}
case 2 :
{
2019-09-03 19:19:28 -04:00
OverrideAutoExposureMethod = EAutoExposureMethod : : AEM_Basic ;
2019-08-13 16:12:20 -04:00
break ;
}
case 3 :
{
2019-09-03 19:19:28 -04:00
OverrideAutoExposureMethod = EAutoExposureMethod : : AEM_Manual ;
2019-08-13 16:12:20 -04:00
break ;
}
}
}
2019-09-03 19:19:28 -04:00
if ( IsAutoExposureMethodSupported ( View . GetFeatureLevel ( ) , OverrideAutoExposureMethod ) )
{
AutoExposureMethod = OverrideAutoExposureMethod ;
}
2019-08-13 16:12:20 -04:00
// If auto exposure is disabled, revert to manual mode which will clamp to a reasonable default.
if ( ! View . Family - > EngineShowFlags . EyeAdaptation )
{
2019-09-03 19:19:28 -04:00
AutoExposureMethod = AEM_Manual ;
2019-08-13 16:12:20 -04:00
}
2019-09-03 19:19:28 -04:00
return AutoExposureMethod ;
2019-08-13 16:12:20 -04:00
}
2020-02-12 13:27:19 -05:00
float GetAutoExposureCompensationFromSettings ( const FViewInfo & View )
2019-08-13 16:12:20 -04:00
{
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
const FPostProcessSettings & Settings = View . FinalPostProcessSettings ;
2019-08-13 16:12:20 -04:00
2018-10-22 17:57:14 -04:00
// This scales the average luminance AFTER it gets clamped, affecting the exposure value directly.
2019-02-28 10:56:59 -05:00
float AutoExposureBias = Settings . AutoExposureBias ;
2019-08-13 16:12:20 -04:00
2020-10-22 19:19:16 -04:00
// AutoExposureBias need to minus 1 if it is used for mobile LDR, because we don't go through the postprocess eye adaptation pass.
2020-09-01 14:07:48 -04:00
if ( IsMobilePlatform ( View . GetShaderPlatform ( ) ) & & ! IsMobileHDR ( ) )
{
2020-10-22 19:19:16 -04:00
AutoExposureBias = AutoExposureBias - 1.0f ;
2020-09-01 14:07:48 -04:00
}
2020-02-12 13:27:19 -05:00
return FMath : : Pow ( 2.0f , AutoExposureBias ) ;
}
float GetAutoExposureCompensationFromCurve ( const FViewInfo & View )
{
const FPostProcessSettings & Settings = View . FinalPostProcessSettings ;
const float LuminanceMax = LuminanceMaxFromLensAttenuation ( ) ;
float AutoExposureBias = 0.0f ;
2019-02-28 10:56:59 -05:00
if ( Settings . AutoExposureBiasCurve )
{
2020-02-12 13:27:19 -05:00
// Note that we are using View.GetLastAverageSceneLuminance() instead of the alternatives. GetLastAverageSceneLuminance()
// immediately converges because it is calculated from the current frame's average luminance (without any history).
//
// Note that when there is an abrupt change, there will be an immediate change in exposure compensation. But this is
// fine because the shader will recalculate a new target exposure. The next result is that the smoothed exposure (purple
// line in HDR visualization) will have sudden shifts, but the actual output exposure value (white line in HDR visualization)
// will be smooth.
2019-08-13 16:12:20 -04:00
const float AverageSceneLuminance = View . GetLastAverageSceneLuminance ( ) ;
2019-02-28 10:56:59 -05:00
if ( AverageSceneLuminance > 0 )
{
2020-02-12 13:27:19 -05:00
// We need the Log2(0.18) to convert from average luminance to saturation luminance
const float LuminanceEV100 = LuminanceToEV100 ( LuminanceMax , AverageSceneLuminance ) + FMath : : Log2 ( 1.0f / 0.18f ) ;
2020-01-24 18:07:01 -05:00
AutoExposureBias + = Settings . AutoExposureBiasCurve - > GetFloatValue ( LuminanceEV100 ) ;
2019-02-28 10:56:59 -05:00
}
}
2019-08-13 16:12:20 -04:00
return FMath : : Pow ( 2.0f , AutoExposureBias ) ;
}
2018-10-22 17:57:14 -04:00
2020-02-12 13:27:19 -05:00
bool IsAutoExposureDebugMode ( const FViewInfo & View )
{
const FEngineShowFlags & EngineShowFlags = View . Family - > EngineShowFlags ;
return View . Family - > UseDebugViewPS ( ) | |
! EngineShowFlags . Lighting | |
( EngineShowFlags . VisualizeBuffer & & View . CurrentBufferVisualizationMode ! = NAME_None ) | |
2021-03-21 04:07:16 -04:00
( EngineShowFlags . VisualizeNanite & & View . CurrentNaniteVisualizationMode ! = NAME_None ) | |
2022-01-27 15:49:31 -05:00
( EngineShowFlags . VisualizeVirtualShadowMap & & View . CurrentVirtualShadowMapVisualizationMode ! = NAME_None ) | |
2020-02-12 13:27:19 -05:00
EngineShowFlags . RayTracingDebug | |
EngineShowFlags . VisualizeDistanceFieldAO | |
2020-12-11 14:21:20 -04:00
EngineShowFlags . VisualizeVolumetricCloudConservativeDensity | |
2020-02-12 13:27:19 -05:00
EngineShowFlags . CollisionVisibility | |
EngineShowFlags . CollisionPawn | |
! EngineShowFlags . PostProcessing ;
}
float CalculateFixedAutoExposure ( const FViewInfo & View )
{
const bool bExtendedLuminanceRange = IsExtendLuminanceRangeEnabled ( ) ;
const float LuminanceMax = bExtendedLuminanceRange ? LuminanceMaxFromLensAttenuation ( ) : 1.0f ;
return EV100ToLuminance ( LuminanceMax , View . Family - > ExposureSettings . FixedEV100 ) ;
}
// on mobile, we are never using the Physical Camera, which is why we need the bForceDisablePhysicalCamera
float CalculateManualAutoExposure ( const FViewInfo & View , bool bForceDisablePhysicalCamera )
{
const bool bExtendedLuminanceRange = IsExtendLuminanceRangeEnabled ( ) ;
const float LuminanceMax = bExtendedLuminanceRange ? LuminanceMaxFromLensAttenuation ( ) : 1.0f ;
const FPostProcessSettings & Settings = View . FinalPostProcessSettings ;
const float BasePhysicalCameraEV100 = FMath : : Log2 ( FMath : : Square ( Settings . DepthOfFieldFstop ) * Settings . CameraShutterSpeed * 100 / FMath : : Max ( 1.f , Settings . CameraISO ) ) ;
const float PhysicalCameraEV100 = ( ! bForceDisablePhysicalCamera & & Settings . AutoExposureApplyPhysicalCameraExposure ) ? BasePhysicalCameraEV100 : 0.0f ;
float FoundLuminance = EV100ToLuminance ( LuminanceMax , PhysicalCameraEV100 ) ;
return FoundLuminance ;
}
2020-01-24 18:07:01 -05:00
2019-08-13 16:12:20 -04:00
FEyeAdaptationParameters GetEyeAdaptationParameters ( const FViewInfo & View , ERHIFeatureLevel : : Type MinFeatureLevel )
{
2020-01-24 18:07:01 -05:00
const bool bExtendedLuminanceRange = IsExtendLuminanceRangeEnabled ( ) ;
2019-08-13 16:12:20 -04:00
const FPostProcessSettings & Settings = View . FinalPostProcessSettings ;
const FEngineShowFlags & EngineShowFlags = View . Family - > EngineShowFlags ;
const EAutoExposureMethod AutoExposureMethod = GetAutoExposureMethod ( View ) ;
2020-09-24 00:43:27 -04:00
2020-01-24 18:07:01 -05:00
const float LuminanceMax = bExtendedLuminanceRange ? LuminanceMaxFromLensAttenuation ( ) : 1.0f ;
2019-08-16 11:56:00 -04:00
2019-08-13 16:12:20 -04:00
const float PercentToScale = 0.01f ;
const float ExposureHighPercent = FMath : : Clamp ( Settings . AutoExposureHighPercent , 1.0f , 99.0f ) * PercentToScale ;
const float ExposureLowPercent = FMath : : Min ( FMath : : Clamp ( Settings . AutoExposureLowPercent , 1.0f , 99.0f ) * PercentToScale , ExposureHighPercent ) ;
2020-01-24 18:07:01 -05:00
const float HistogramLogMax = bExtendedLuminanceRange ? EV100ToLog2 ( LuminanceMax , Settings . HistogramLogMax ) : Settings . HistogramLogMax ;
const float HistogramLogMin = FMath : : Min ( bExtendedLuminanceRange ? EV100ToLog2 ( LuminanceMax , Settings . HistogramLogMin ) : Settings . HistogramLogMin , HistogramLogMax - 1 ) ;
2019-08-13 16:12:20 -04:00
2020-01-24 18:07:01 -05:00
// These clamp the average luminance computed from the scene color. We are going to calculate the white point first, and then
// figure out the average grey point later. I.e. if the white point is 1.0, the middle grey point should be 0.18.
2020-09-24 00:43:27 -04:00
float MinWhitePointLuminance = 1.0f ;
2020-01-24 18:07:01 -05:00
float MaxWhitePointLuminance = 1.0f ;
2020-02-12 13:27:19 -05:00
// Get the exposure compensation from the post process volume settings (everything except the curve)
float ExposureCompensationSettings = GetAutoExposureCompensationFromSettings ( View ) ;
2020-01-24 18:07:01 -05:00
2020-02-12 13:27:19 -05:00
// Get the exposure compensation from the curve
float ExposureCompensationCurve = GetAutoExposureCompensationFromCurve ( View ) ;
const float BlackHistogramBucketInfluence = CVarEyeAdaptationBlackHistogramBucketInfluence . GetValueOnRenderThread ( ) ;
2020-01-24 18:07:01 -05:00
2021-09-01 11:22:04 -04:00
float LocalExposureMiddleGreyExposureCompensation = FMath : : Pow ( 2.0f , View . FinalPostProcessSettings . LocalExposureMiddleGreyBias ) ;
if ( AutoExposureMethod = = EAutoExposureMethod : : AEM_Manual )
{
// when using manual exposure cancel exposure compensation setting and curve from middle grey used by local exposure.
LocalExposureMiddleGreyExposureCompensation / = ( ExposureCompensationSettings * ExposureCompensationCurve ) ;
}
2020-01-24 18:07:01 -05:00
const float kMiddleGrey = 0.18f ;
// AEM_Histogram and AEM_Basic adjust their ExposureCompensation to middle grey (0.18). AEM_Manual ExposureCompensation is already calibrated to 1.0.
const float GreyMult = ( AutoExposureMethod = = AEM_Manual ) ? 1.0f : kMiddleGrey ;
2019-08-13 16:12:20 -04:00
2020-02-12 13:27:19 -05:00
const bool IsDebugViewMode = IsAutoExposureDebugMode ( View ) ;
if ( IsDebugViewMode )
2018-10-22 17:57:14 -04:00
{
2020-02-12 13:27:19 -05:00
ExposureCompensationSettings = 1.0f ;
ExposureCompensationCurve = 1.0f ;
2019-10-31 16:33:12 -04:00
}
// Fixed exposure override in effect.
else if ( View . Family - > ExposureSettings . bFixed )
{
2020-02-12 13:27:19 -05:00
ExposureCompensationSettings = 1.0f ;
ExposureCompensationCurve = 1.0f ;
2020-01-24 18:07:01 -05:00
// ignores bExtendedLuminanceRange
2020-02-12 13:27:19 -05:00
MinWhitePointLuminance = MaxWhitePointLuminance = CalculateFixedAutoExposure ( View ) ;
2019-10-31 16:33:12 -04:00
}
2021-08-03 11:56:47 -04:00
// The feature level check should always pass unless on mobile with MobileHDR is false
else if ( EngineShowFlags . EyeAdaptation & & View . GetFeatureLevel ( ) > = MinFeatureLevel )
2019-10-31 16:33:12 -04:00
{
if ( AutoExposureMethod = = EAutoExposureMethod : : AEM_Manual )
2018-10-22 17:57:14 -04:00
{
2020-01-24 18:07:01 -05:00
// ignores bExtendedLuminanceRange
2020-02-12 13:27:19 -05:00
MinWhitePointLuminance = MaxWhitePointLuminance = CalculateManualAutoExposure ( View , false ) ;
2019-10-31 16:33:12 -04:00
}
else
{
2020-01-24 18:07:01 -05:00
if ( bExtendedLuminanceRange )
{
MinWhitePointLuminance = EV100ToLuminance ( LuminanceMax , Settings . AutoExposureMinBrightness ) ;
MaxWhitePointLuminance = EV100ToLuminance ( LuminanceMax , Settings . AutoExposureMaxBrightness ) ;
}
else
{
MinWhitePointLuminance = Settings . AutoExposureMinBrightness ;
MaxWhitePointLuminance = Settings . AutoExposureMaxBrightness ;
}
2018-10-22 17:57:14 -04:00
}
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
}
2021-08-03 11:56:47 -04:00
else
{
// if eye adaptation is off, then set everything to 1.0
ExposureCompensationSettings = 1.0f ;
ExposureCompensationCurve = 1.0f ;
// GetAutoExposureMethod() should return Manual in this case.
check ( AutoExposureMethod = = AEM_Manual ) ;
// just lock to 1.0, it's not possible to guess a reasonable value using the min and max.
MinWhitePointLuminance = MaxWhitePointLuminance = 1.0 ;
}
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
2020-01-24 18:07:01 -05:00
MinWhitePointLuminance = FMath : : Min ( MinWhitePointLuminance , MaxWhitePointLuminance ) ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
2019-08-13 16:12:20 -04:00
const float HistogramLogDelta = HistogramLogMax - HistogramLogMin ;
const float HistogramScale = 1.0f / HistogramLogDelta ;
const float HistogramBias = - HistogramLogMin * HistogramScale ;
2020-09-24 00:43:27 -04:00
// If we are in histogram mode, then we want to set the minimum to the bottom end of the histogram. But if we are in basic mode,
// we want to simply use a small epsilon to keep true black values from returning a NaN and/or a very low value. Also, basic
// mode does the calculation in pre-exposure space, which is why we need to multiply by View.PreExposure.
2020-10-09 22:42:26 -04:00
const float LuminanceMin = ( AutoExposureMethod = = AEM_Basic ) ? 0.0001f : FMath : : Exp2 ( HistogramLogMin ) ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
2021-10-01 12:40:13 -04:00
FTextureRHIRef MeterMask = nullptr ;
if ( Settings . AutoExposureMeterMask & &
Settings . AutoExposureMeterMask - > GetResource ( ) & &
Settings . AutoExposureMeterMask - > GetResource ( ) - > TextureRHI )
{
MeterMask = Settings . AutoExposureMeterMask - > GetResource ( ) - > TextureRHI ;
}
else
{
MeterMask = GWhiteTexture - > TextureRHI ;
}
2020-01-24 18:07:01 -05:00
// The distance at which we switch from linear to exponential. I.e. at StartDistance=1.5, when linear is 1.5 f-stops away from hitting the
// target, we switch to exponential.
const float StartDistance = CVarEyeAdaptationExponentialTransitionDistance . GetValueOnRenderThread ( ) ;
2020-09-24 00:43:27 -04:00
const float StartTimeUp = StartDistance / FMath : : Max ( Settings . AutoExposureSpeedUp , 0.001f ) ;
const float StartTimeDown = StartDistance / FMath : : Max ( Settings . AutoExposureSpeedDown , 0.001f ) ;
2020-01-24 18:07:01 -05:00
// We want to ensure that at time=StartT, that the derivative of the exponential curve is the same as the derivative of the linear curve.
// For the linear curve, the step will be AdaptationSpeed * FrameTime.
// For the exponential curve, the step will be at t=StartT, M is slope modifier:
// slope(t) = M * (1.0f - exp2(-FrameTime * AdaptionSpeed)) * AdaptionSpeed * StartT
// AdaptionSpeed * FrameTime = M * (1.0f - exp2(-FrameTime * AdaptionSpeed)) * AdaptationSpeed * StartT
// M = FrameTime / (1.0f - exp2(-FrameTime * AdaptionSpeed)) * StartT
//
// To be technically correct, we should take the limit as FrameTime->0, but for simplicity we can make FrameTime a small number. So:
2020-09-24 00:43:27 -04:00
const float kFrameTimeEps = 1.0f / 60.0f ;
2020-01-24 18:07:01 -05:00
const float ExponentialUpM = kFrameTimeEps / ( ( 1.0f - exp2 ( - kFrameTimeEps * Settings . AutoExposureSpeedUp ) ) * StartTimeUp ) ;
const float ExponentialDownM = kFrameTimeEps / ( ( 1.0f - exp2 ( - kFrameTimeEps * Settings . AutoExposureSpeedDown ) ) * StartTimeDown ) ;
// If the white point luminance is 1.0, then the middle grey luminance should be 0.18.
const float MinAverageLuminance = MinWhitePointLuminance * kMiddleGrey ;
const float MaxAverageLuminance = MaxWhitePointLuminance * kMiddleGrey ;
const bool bValidRange = View . FinalPostProcessSettings . AutoExposureMinBrightness < View . FinalPostProcessSettings . AutoExposureMaxBrightness ;
2021-08-23 15:14:41 -04:00
const bool bValidSpeeds = View . FinalPostProcessSettings . AutoExposureSpeedDown > = 0.f & & View . FinalPostProcessSettings . AutoExposureSpeedUp > = 0.f ;
2020-01-24 18:07:01 -05:00
// if it is a camera cut we force the exposure to go all the way to the target exposure without blending.
// if it is manual mode, we also force the exposure to hit the target, which matters for HDR Visualization
// if we don't have a valid range (AutoExposureMinBrightness == AutoExposureMaxBrightness) then force it like Manual as well.
2021-08-23 15:14:41 -04:00
const float ForceTarget = ( View . bCameraCut | | AutoExposureMethod = = EAutoExposureMethod : : AEM_Manual | | ! bValidRange | | ! bValidSpeeds ) ? 1.0f : 0.0f ;
2020-01-24 18:07:01 -05:00
2019-08-13 16:12:20 -04:00
FEyeAdaptationParameters Parameters ;
Parameters . ExposureLowPercent = ExposureLowPercent ;
Parameters . ExposureHighPercent = ExposureHighPercent ;
Parameters . MinAverageLuminance = MinAverageLuminance ;
Parameters . MaxAverageLuminance = MaxAverageLuminance ;
2020-02-12 13:27:19 -05:00
Parameters . ExposureCompensationSettings = ExposureCompensationSettings ;
Parameters . ExposureCompensationCurve = ExposureCompensationCurve ;
2021-12-02 23:53:56 -05:00
Parameters . DeltaWorldTime = View . Family - > Time . GetDeltaWorldTimeSeconds ( ) ;
2019-08-13 16:12:20 -04:00
Parameters . ExposureSpeedUp = Settings . AutoExposureSpeedUp ;
Parameters . ExposureSpeedDown = Settings . AutoExposureSpeedDown ;
Parameters . HistogramScale = HistogramScale ;
Parameters . HistogramBias = HistogramBias ;
Parameters . LuminanceMin = LuminanceMin ;
2022-02-24 20:07:17 -05:00
Parameters . LocalExposureContrastScale = Settings . LocalExposureContrastScale ;
2021-09-01 11:22:04 -04:00
Parameters . LocalExposureDetailStrength = Settings . LocalExposureDetailStrength ;
Parameters . LocalExposureBlurredLuminanceBlend = Settings . LocalExposureBlurredLuminanceBlend ;
Parameters . LocalExposureMiddleGreyExposureCompensation = LocalExposureMiddleGreyExposureCompensation ;
2020-02-12 13:27:19 -05:00
Parameters . BlackHistogramBucketInfluence = BlackHistogramBucketInfluence ; // no calibration constant because it is now baked into ExposureCompensation
2020-01-24 18:07:01 -05:00
Parameters . GreyMult = GreyMult ;
Parameters . ExponentialDownM = ExponentialDownM ;
Parameters . ExponentialUpM = ExponentialUpM ;
Parameters . StartDistance = StartDistance ;
Parameters . LuminanceMax = LuminanceMax ;
Parameters . ForceTarget = ForceTarget ;
Parameters . VisualizeDebugType = CVarEyeAdaptationVisualizeDebugType . GetValueOnRenderThread ( ) ;
Parameters . MeterMaskTexture = MeterMask ;
Parameters . MeterMaskSampler = TStaticSamplerState < SF_Bilinear , AM_Clamp , AM_Clamp , AM_Clamp > : : GetRHI ( ) ;
2019-08-13 16:12:20 -04:00
return Parameters ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
}
2019-08-13 18:15:27 -04:00
float GetEyeAdaptationFixedExposure ( const FViewInfo & View )
2014-03-14 14:13:41 -04:00
{
2021-08-03 11:56:47 -04:00
const FEyeAdaptationParameters Parameters = GetEyeAdaptationParameters ( View , GetBasicEyeAdaptationMinFeatureLevel ( ) ) ;
2014-03-14 14:13:41 -04:00
2019-08-13 18:15:27 -04:00
const float Exposure = ( Parameters . MinAverageLuminance + Parameters . MaxAverageLuminance ) * 0.5f ;
2014-03-14 14:13:41 -04:00
2020-01-24 18:07:01 -05:00
const float kMiddleGrey = 0.18f ;
const float ExposureScale = kMiddleGrey / FMath : : Max ( 0.0001f , Exposure ) ;
2019-08-13 18:15:27 -04:00
2020-02-12 13:27:19 -05:00
// We're ignoring any curve influence
return ExposureScale * Parameters . ExposureCompensationSettings ;
2014-03-14 14:13:41 -04:00
}
2019-08-14 14:02:54 -04:00
//////////////////////////////////////////////////////////////////////////
//! Histogram Eye Adaptation
//////////////////////////////////////////////////////////////////////////
2019-06-11 18:27:07 -04:00
2021-05-18 09:39:29 -04:00
class FEyeAdaptationCS : public FGlobalShader
2015-12-10 21:55:37 -05:00
{
2021-05-18 09:39:29 -04:00
DECLARE_GLOBAL_SHADER ( FEyeAdaptationCS ) ;
SHADER_USE_PARAMETER_STRUCT ( FEyeAdaptationCS , FGlobalShader ) ;
2019-08-14 17:43:15 -04:00
BEGIN_SHADER_PARAMETER_STRUCT ( FParameters , )
SHADER_PARAMETER_STRUCT ( FEyeAdaptationParameters , EyeAdaptation )
SHADER_PARAMETER_RDG_TEXTURE ( Texture2D , HistogramTexture )
2021-05-18 09:39:29 -04:00
SHADER_PARAMETER_RDG_TEXTURE_UAV ( RWTexture2D < float4 > , RWEyeAdaptationTexture )
END_SHADER_PARAMETER_STRUCT ( )
2015-12-10 21:55:37 -05:00
2021-05-18 09:39:29 -04:00
static const EPixelFormat OutputFormat = PF_A32B32G32R32F ;
2019-04-22 11:46:24 -04:00
static bool ShouldCompilePermutation ( const FGlobalShaderPermutationParameters & Parameters )
{
return IsFeatureLevelSupported ( Parameters . Platform , ERHIFeatureLevel : : SM5 ) ;
}
2019-08-13 18:15:27 -04:00
} ;
2017-02-16 17:52:21 -05:00
2019-08-14 17:43:15 -04:00
IMPLEMENT_GLOBAL_SHADER ( FEyeAdaptationCS , " /Engine/Private/PostProcessEyeAdaptation.usf " , " EyeAdaptationCS " , SF_Compute ) ;
2017-02-16 17:52:21 -05:00
2019-08-13 18:15:27 -04:00
FRDGTextureRef AddHistogramEyeAdaptationPass (
FRDGBuilder & GraphBuilder ,
2019-10-01 13:03:04 -04:00
const FViewInfo & View ,
2019-08-13 18:15:27 -04:00
const FEyeAdaptationParameters & EyeAdaptationParameters ,
FRDGTextureRef HistogramTexture )
{
2021-11-18 14:37:34 -05:00
View . UpdateEyeAdaptationLastExposureFromTexture ( ) ;
View . SwapEyeAdaptationTextures ( ) ;
2016-03-31 15:18:30 -04:00
2022-01-31 17:22:31 -05:00
FRDGTextureRef OutputTexture = GraphBuilder . RegisterExternalTexture ( View . GetEyeAdaptationTexture ( GraphBuilder . RHICmdList ) , ERDGTextureFlags : : MultiFrame ) ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3231693)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3219796 on 2016/12/02 by Rolando.Caloca
DR - vk - Increase timeout to 60ms
Change 3219884 on 2016/12/02 by Daniel.Wright
Assert to help track down rare crash locking capsule indirect shadow vertex buffer
Change 3219885 on 2016/12/02 by Daniel.Wright
Fixed saving a package that doesn't exist on disk but exists in p4 at a newer revision when the user chooses 'Mark Writable'
Change 3219886 on 2016/12/02 by Daniel.Wright
Don't create projected shadows when r.ShadowQuality is 0
* Fixes crash in the forward path trying to render shadows
* In the deferred path, the shadowmap was still being rendered and only the projection skipped, now all cost will be skipped
Change 3219887 on 2016/12/02 by Daniel.Wright
Changed ClearRenderTarget2D default alpha to 1, which is necessary for correct compositing
Change 3219893 on 2016/12/02 by Daniel.Wright
AMD AGS library with approved TPS
Disabled DFAO on AMD pre-GCN PC video cards to workaround a driver bug which won't be fixed (Radeon 6xxx and below)
Change 3219913 on 2016/12/02 by Daniel.Wright
Level unload of a lighting scenario propagates the lighting scenario change - fixes crash when precomputed lighting volume data gets unloaded
Change 3220029 on 2016/12/02 by Daniel.Wright
Async shader compiling now recreates scene proxies which are affected by the material which was compiled. This fixes crashes which were occuring as proxies cache various material properties, but applying compiled materials would not update these cached properties (bRequiresAdjacencyInformation).
* A new ensure has been added in FMeshElementCollector::AddMesh and FBatchingSPDI::DrawMesh to catch attempts to render with a material not reported in GetUsedMaterials
* Fixed UParticleSystemComponent::GetUsedMaterials and UMaterialBillboardComponent::GetUsedMaterials
* FMaterialUpdateContext should be changed to use the same pattern, but that hasn't been done yet
Change 3220108 on 2016/12/02 by Daniel.Wright
Fixed shadowmap channel assignment for stationary lights which are not in a lighting scenario level, when a lighting scenario level is present
Change 3220504 on 2016/12/03 by Mark.Satterthwaite
Metal Desktop Tessellation support from Unicorn.
- Apple: Metal tessellation support added to MetalShaderFormat, MetalRHI and incl. changes to engine runtime/shaders for Desktop renderer and enabled in ElementalDemo by default (OS X 10.11 will run SM4).
- Epic: Support for different Metal shader standards on Mac, iOS & tvOS which required moving some RHI functions around as this is a project setting and not a compile-time constant.
- Epic: Fragment shader UAV support, which is also tied to newer Metal shader standard like Tessellation.
- Epic: Significant refactor of MetalRHI's internals to clearly separate state-caching from render-pass management and command-encoding.
- Epic: Internal MetalRHI validation code is now cleanly separated out into custom implementations of the Metal @protocol's and is on by default.
- Epic: Various fixes to Layered Rendering for Metal.
- Omits Mobile Tessellation support which needs further revision.
Change 3220881 on 2016/12/04 by Mark.Satterthwaite
Compiles fixes for iOS & static analysis fixes from Windows.
Change 3221180 on 2016/12/05 by Guillaume.Abadie
Avoid compiling PreviousFrameSwitch's both Current Frame and Previous Frame inputs every time.
Change 3221217 on 2016/12/05 by Chris.Bunner
More NVAPI warning fixups.
Change 3221219 on 2016/12/05 by Chris.Bunner
When comparing overriden properties used to force instance recompilation we need to check against the base material, not assume the immediate parent.
#jira UE-37792
Change 3221220 on 2016/12/05 by Chris.Bunner
Exported GetAllStaticSwitchParamNames and GetAllStaticComponentMaskParamNames.
#jira UE-35132
Change 3221221 on 2016/12/05 by Chris.Bunner
PR #2785: Fix comment typo in RendererInterface.h (Contributed by dustin-biser)
#jira UE-35760
Change 3221223 on 2016/12/05 by Chris.Bunner
Default to include dev-code when compiling material preview stats.
#jira UE-20321
Change 3221534 on 2016/12/05 by Rolando.Caloca
DR - Added FDynamicRHI::GetName()
Change 3221833 on 2016/12/05 by Chris.Bunner
Set correct output extent on PostProcessUpscale (allows users to extend chain correctly).
#jira UE-36989
Change 3221852 on 2016/12/05 by Chris.Bunner
32-bit/ch EXR screenshot and frame dump output.
Fixed row increment bug in 128-bit/px surface format readback.
#jira UE-37962
Change 3222059 on 2016/12/05 by Rolando.Caloca
DR - vk - Fix memory type not found
Change 3222104 on 2016/12/05 by Rolando.Caloca
DR - Lambdaize
- Added quicker method to check if system textures are initialized
Change 3222290 on 2016/12/05 by Mark.Satterthwaite
Trivial fixes to reporting Metal shader pipeline errors - need to check if Hull & Domain exist.
Change 3222864 on 2016/12/06 by Rolando.Caloca
DR - Fix mem leak when exiting
Change 3222873 on 2016/12/06 by Rolando.Caloca
DR - vk - Minor info to help track down leaks
Change 3222875 on 2016/12/06 by Rolando.Caloca
DR - Fix mem leak with VisualizeTexture
#jira UE-39360
Change 3223226 on 2016/12/06 by Chris.Bunner
Static analysis warning workaround.
Change 3223235 on 2016/12/06 by Ben.Woodhouse
Integrate from NREAL: Set a custom projection matrix on a SceneCapture2D
Change 3223343 on 2016/12/06 by Chris.Bunner
Moved HLOD persistent data to viewstate to fix per-view compatability.
#jira UE-37539
Change 3223349 on 2016/12/06 by Chris.Bunner
Fixed HLOD with FreezeRendering command.
#jira UE-29839
Change 3223371 on 2016/12/06 by Michael.Trepka
Removed obsolete check() in FMetalSurface constructor
Change 3223450 on 2016/12/06 by Chris.Bunner
Added explicit ScRGB output device selection rather than Nvidia-only hardcoded checks. Allows easier support for Mac and other devices moving forward.
Change 3223638 on 2016/12/06 by Michael.Trepka
Restored part of the check() in FMetalSurface constructor removed in CL 3223371
Change 3223642 on 2016/12/06 by Mark.Satterthwaite
Experimental Metal EDR/HDR output support for Mac (iOS/tvOS need custom formats & shaders so they are not supported yet).
- Only available on macOS Sierra (10.12) for Macs with HDR displays (e.g. Retina iMacs).
- Enable with -metaledr command-line argument as it is off-by-default.
- Sets up the CAMetalLayer & the back-buffer for RGBA_FP16 output on Mac using DCI-P3 as the color gamut and ACES 1000 nit ScRGB output encoding.
Change 3223830 on 2016/12/06 by Rolando.Caloca
DR - vk - Better error when finding an invalid Vulkan driver
#jira UE-37495
Change 3223869 on 2016/12/06 by Rolando.Caloca
DR - vk - Reuse fences
Change 3223906 on 2016/12/06 by Guillaume.Abadie
Fix alpha through TempAA artifact causing a small darker edge layouts.
Change 3224199 on 2016/12/06 by Mark.Satterthwaite
Fix a dumb copy-paste error from the HDR changes to Metal.
Change 3224220 on 2016/12/06 by Mark.Satterthwaite
Fix various errors with Metal UAV & Render-Pass Restart support so that we can use the Pixel Shader culling for DistanceField effects.
- Unfortunately Metal requires that a texture be bound to start a render-pass, so reuse the dummy depth-stencil surface from the problematic editor preview tile rendering.
Change 3224236 on 2016/12/06 by Mark.Satterthwaite
IWYU CIS compile fix for iOS.
Change 3224366 on 2016/12/06 by Mark.Satterthwaite
Simplify some of the changes from CL# 3224220 so that we don't perform unnecessary clears.
- If the RenderPass is broken to issue compute or blit operations then treat the cached RenderTargetsInfo as invalid, unless the RenderPass is restarted.
- This guarantees that we don't erroneously ignore calls to SetRenderTargets if the calling code issues a dispatch between two RenderPasses that use the same RenderTargetsInfo.
Change 3224416 on 2016/12/06 by Uriel.Doyon
New default implementation for UPrimitiveComponent::GetStreamingTextureInfo using a conservative heuristic where the textures are stretched across the bounds.
Optimized UPrimitiveComponent::GetStreamingTextureInfoWithNULLRemoval by not handling registered components with no proxy (essentially hidden game / collision primitives).
Added blueprint support for texture streaming built data through FStaticMeshComponentInstanceData.
Fix for material texture streaming data not being available on some cooked builds.
Enabled split requests on all texture load requests (first loading everything visible and then loaded everything not visible).
This is controlled by "r.Streaming.MinMipForSplitRequest" which defines the minimum mip for which to allow splitting.
Forced residency are now loaded in two steps (visible, then forced), improving reactiveness.
Updated "stat streaming" to include "UnkownRefMips" which represent texture with no known component referencing them,
and also "LastRenderTimeMips" which related to timed primitives.
Changed "Forced Mips" so that it only shows mips that are loaded become of forced residency.
"Texture Streaming Build" now updates the map check after execution.
Removed Orphaned texture logic as this has become irrelevant with the latest retention priority logic.
Updated "r.streaming.usenewmetrics" so that it shows behavior before and after 4.12 improvements.
Change 3224532 on 2016/12/07 by Uriel.Doyon
Integrated CL 3223965 :
Building texture streaming data for materials does not wait for pending shaders to finish compilation anymore.
Added more options to allow the user to cancel this build also.
Change 3224714 on 2016/12/07 by Ben.Woodhouse
Cherry pick CL 3223972 from //fortnite/main:
Disable Geometry shader onchip on XB1. This saves 4ms for a single shadow casting point light @ 512x512 (4.8ms to 1.8ms)
Change 3224715 on 2016/12/07 by Ben.Woodhouse
New version of d3dx12.h from Microsoft which incorporates my suggested static analysis fixes. This avoids us diverging from the official version
Change 3224975 on 2016/12/07 by Rolando.Caloca
DR - vk - Dump improvements
Change 3225012 on 2016/12/07 by Rolando.Caloca
DR - Show warning if trying to use num samples != (1,2,4,8,16)
Change 3225126 on 2016/12/07 by Chris.Bunner
Added 'force 128-bit rendering pipeline' to high-res screenshot tool.
#jira UE-39345
Change 3225449 on 2016/12/07 by Chris.Bunner
Updated engine rendering defaults to better match current best practices.
#jira UE-38081
Change 3225485 on 2016/12/07 by Chris.Bunner
Moved QuantizeSceneBufferSize to RenderCore and added call for PostProcess settings. Fixes screenpercentage out-of-bounds reads in some cases.
#jira UE-19394
Change 3225486 on 2016/12/07 by Chris.Bunner
Only disable TAA during HighResScreenshots if we don't have a reasonable frame-delay enabled.
Change 3225505 on 2016/12/07 by Daniel.Wright
Fixed exponential height fog disappearing with no skybox
Change 3225655 on 2016/12/07 by Benjamin.Hyder
Updating TM-Shadermodels to include Translucent lighting, Two sided, updated cloth animation, and adjusted lighting.
Change 3225668 on 2016/12/07 by Chris.Bunner
Dirty owning packages when user manually forces regeneration of all reflection captures.
#jira UE-38759
Change 3226139 on 2016/12/07 by Rolando.Caloca
DR - Fix recompute tangents disabling skin cache
- Make some macros into lambdas
#jira UE-39143
Change 3226212 on 2016/12/07 by Daniel.Wright
Features which require a full prepass use DDM_AllOpaque instead of DDM_AllOccluders, which can be skipped if the component has bUseAsOccluder=false
Change 3226213 on 2016/12/07 by Daniel.Wright
Scene Capture 2D can specify a global clip plane, which is useful for portals
* Requires the global clip plane project setting to be enabled
Change 3226214 on 2016/12/07 by Daniel.Wright
Improved deferred shadowing with MSAA by upsampling light attenuation intelligently in the base pass
* If the current fragment's depth doesn't match what was used for deferred shadowing, the neighbor (cross pattern) with the nearest depth's shadowing is used
* Edge artifacts can still occur where the upsample fails or the shadow factor was computed per-sample due to depth / stencil testing
* Indirect Occlusion from capsule shadows also uses the nearest depth neighbor UV for no extra cost
* Base pass on 970 GTX 1.69ms -> 1.85ms (.16ms) in RoboRecall
Change 3226258 on 2016/12/07 by Rolando.Caloca
DR - Typo fix
Change 3226259 on 2016/12/07 by Rolando.Caloca
DR - compile fix
#jira UE-39143
Change 3226932 on 2016/12/08 by Chris.Bunner
Re-saved Infiltrator maps to update reflection captures.
#jira UE-38759
Change 3227063 on 2016/12/08 by Mark.Satterthwaite
For Metal platforms ONLY temporarily disable USE_LIGHT_GRID_REFLECTION_CAPTURE_CULLING to avoid UE-37436 while the Nvidia driver team investigate why this doesn't work for them but does for the others. This won't affect non-Metal platforms and the intent is to revert this prior to 4.16 provided we can work through the problem with Nvidia.
#jira UE-37436
Change 3227120 on 2016/12/08 by Gil.Gribb
Merging //UE4/Dev-Main@3226895 to Dev-Rendering (//UE4/Dev-Rendering)
Change 3227211 on 2016/12/08 by Arne.Schober
DR - UE-38585 - Fixing crash where HierInstStaticMesh duplication fails. Also reverting the fix from UE-28189 which is redundant.
Change 3227257 on 2016/12/08 by Marc.Olano
Extension to PseudoVolumeTexture for more flexible layout
Change by ryan.brucks
Change 3227286 on 2016/12/08 by Rolando.Caloca
DR - Fix crash when using custom expressions and using reserved keywords
#jira UE-39311
Change 3227376 on 2016/12/08 by Mark.Satterthwaite
Must not include a private header inside the MenuStack public header as that causes compile errors in plugins.
Change 3227415 on 2016/12/08 by Mark.Satterthwaite
Fix shader compilation due to my disabling of USE_LIGHT_GRID_REFLECTION_CAPTURE_CULLING on Metal - InstancedCompositeTileReflectionCaptureIndices needs to be defined even though Metal doesn't support instanced-stereo rendering.
Change 3227516 on 2016/12/08 by Daniel.Wright
Implemented UWidgetComponent::GetUsedMaterials
Change 3227521 on 2016/12/08 by Guillaume.Abadie
Fixes post process volume's indirect lighting color.
#jira UE-38888
Change 3227567 on 2016/12/08 by Marc.Olano
New upscale filters: Lanczos-2 (new default), Lanczos-3 and Gaussian Unsharp Mask
Change 3227628 on 2016/12/08 by Daniel.Wright
Removed redundant ResolveSceneDepthTexture from the merge
Change 3227635 on 2016/12/08 by Daniel.Wright
Forward renderer supports shadowing from movable lights and light functions
* Only 4 shadow casting movable or stationary lights can overlap at any point in space, otherwise the movable lights will lose their shadows and an on-screen message will be displayed
* Light functions only work on shadow casting lights since they need a shadowmap channel to be assigned
Change 3227660 on 2016/12/08 by Rolando.Caloca
DR - vk - Fix r.MobileMSAA on Vulkan
- r.MobileMSAA is now read-only (to be fixed on 4.16)
- Show time for PSO creation hitches
#jira UE-39184
Change 3227704 on 2016/12/08 by Mark.Satterthwaite
Fix Mac HDR causing incorrect output color encoding being used, HDR support is now entirely off unless you pass -metaledr which will enable it regardless of whether the current display supports HDR (as we haven't written the detection code yet). Fixed the LUT/UI compositing along the way - Mac Metal wasn't using volume LUT as it should have been, RHISupportsVertexShaderLayer now correctly returns false for non-Mac Metal platforms.
Change 3227705 on 2016/12/08 by Daniel.Wright
Replaced built-in samplers in the nearest depth translucency upsample because the built-in samplers are no longer bound on PC (cl 2852426)
Change 3227787 on 2016/12/08 by Chris.Bunner
Added extent clear to motion blur pass to catch misized buffers bringing in errors.
Added early out to clear call when excluded region matches RT region.
#jira UE-39437
Change 3228177 on 2016/12/08 by Marc.Olano
Fix DCC sqrt(int) error
Change 3228285 on 2016/12/08 by Chris.Bunner
Back out changelist 3225449.
#jira UE-39528
Change 3228680 on 2016/12/09 by Gil.Gribb
Merging //UE4/Dev-Main@3228528 to Dev-Rendering (//UE4/Dev-Rendering)
Change 3228940 on 2016/12/09 by Mark.Satterthwaite
Editor fixes for 4.15:
- PostProcessTonemap can't fail to bind a texture to the ColorLUT or the subsequent rendering will be garbage: the changes for optimising stereo rendering forgot to account for the Editor's use of Views without States for the asset preview thumbnails. Amended the CombineLUT post-processing to allocate a local output texture when there's no ViewState and read from this when this situation arises which makes everything function again.
- Don't start render-passes without a valid render-target-array in MetalRHI.
Change 3228950 on 2016/12/09 by Mark.Satterthwaite
Make GPUSkinCache run on Mac Metal - it wasn't working because it was forcibly disabled on all platforms but for Windows D3D 11.
- Fixed the Skeleton editor tree trying to access a widget before it has been constructed.
- Enable GPUSkinCache for Metal SM5: doesn't render correctly, even on AMD, so needs Radar's filing and investigation.
#jira UE-39256
Change 3229013 on 2016/12/09 by Mark.Satterthwaite
Further tidy up in SSkeletonTreeView as suggested by Nick.A.
Change 3229101 on 2016/12/09 by Chris.Bunner
Log compile error fix and updated cvar comments.
Change 3229236 on 2016/12/09 by Ben.Woodhouse
XB1 D3D11 and D3D12: Use the DXGI frame statistics to get accurate GPU time unaffected by bubbles
Change 3229430 on 2016/12/09 by Ben.Woodhouse
PR #2680: Optimized histogram generation. (Contributed by PjotrSvetachov)
Profiled on nvidia 980GTX (2x faster), and on XB1 (marginally faster)
Change 3229580 on 2016/12/09 by Marcus.Wassmer
DepthBoundsTest for AMD.
Change 3229701 on 2016/12/09 by Michael.Trepka
Changed "OS X" to "macOS" in few places where we display it and updated the code that asks users to update to latest version to check for 10.12.2
Change 3229706 on 2016/12/09 by Chris.Bunner
Added GameUserSettings controls for HDR display output.
Removed Metal commandline as this should replace the need for it.
Change 3229774 on 2016/12/09 by Michael.Trepka
Disabled OpenGL on Mac. -opengl is now ignored, we always use Metal. On old Macs that do not support Metal we show a message saying that the app requires Metal and exit.
Change 3229819 on 2016/12/09 by Chris.Bunner
Updated engine rendering defaults to better match current best practices.
#jira UE-38081
Change 3229948 on 2016/12/09 by Rolando.Caloca
DR - Fix d3d debug error
#jira UE-39589
Change 3230341 on 2016/12/11 by Mark.Satterthwaite
Don't fatally assert that the game-thread stalled waiting for the rendering thread in the Editor executable, even when running -game as the rendering thread can take a while to respond if shaders need to be compiled.
#jira UE-39613
Change 3230860 on 2016/12/12 by Marcus.Wassmer
Experimental Nvidia AFR support.
Change 3230930 on 2016/12/12 by Mark.Satterthwaite
Disable RHICmdList state-caching on Mac - Metal already does this internally and depends on receiving all state changes in order to function.
Change 3231252 on 2016/12/12 by Marcus.Wassmer
Fix NumGPU detection. (SLI only crash)
Change 3231486 on 2016/12/12 by Mark.Satterthwaite
Fix a stupid mistake in MetalStateCache::CommitResourceTable that would unnecessarily rebind samplers.
Change 3231661 on 2016/12/12 by Mark.Satterthwaite
Retain the RHI samplers in MetalRHI to guarantee lifetime.
[CL 3231696 by Gil Gribb in Main branch]
2016-12-12 17:47:42 -05:00
2021-05-18 09:39:29 -04:00
FEyeAdaptationCS : : FParameters * PassParameters = GraphBuilder . AllocParameters < FEyeAdaptationCS : : FParameters > ( ) ;
PassParameters - > EyeAdaptation = GetEyeAdaptationParameters ( View , ERHIFeatureLevel : : SM5 ) ;
PassParameters - > HistogramTexture = HistogramTexture ;
PassParameters - > RWEyeAdaptationTexture = GraphBuilder . CreateUAV ( OutputTexture ) ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3231693)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3219796 on 2016/12/02 by Rolando.Caloca
DR - vk - Increase timeout to 60ms
Change 3219884 on 2016/12/02 by Daniel.Wright
Assert to help track down rare crash locking capsule indirect shadow vertex buffer
Change 3219885 on 2016/12/02 by Daniel.Wright
Fixed saving a package that doesn't exist on disk but exists in p4 at a newer revision when the user chooses 'Mark Writable'
Change 3219886 on 2016/12/02 by Daniel.Wright
Don't create projected shadows when r.ShadowQuality is 0
* Fixes crash in the forward path trying to render shadows
* In the deferred path, the shadowmap was still being rendered and only the projection skipped, now all cost will be skipped
Change 3219887 on 2016/12/02 by Daniel.Wright
Changed ClearRenderTarget2D default alpha to 1, which is necessary for correct compositing
Change 3219893 on 2016/12/02 by Daniel.Wright
AMD AGS library with approved TPS
Disabled DFAO on AMD pre-GCN PC video cards to workaround a driver bug which won't be fixed (Radeon 6xxx and below)
Change 3219913 on 2016/12/02 by Daniel.Wright
Level unload of a lighting scenario propagates the lighting scenario change - fixes crash when precomputed lighting volume data gets unloaded
Change 3220029 on 2016/12/02 by Daniel.Wright
Async shader compiling now recreates scene proxies which are affected by the material which was compiled. This fixes crashes which were occuring as proxies cache various material properties, but applying compiled materials would not update these cached properties (bRequiresAdjacencyInformation).
* A new ensure has been added in FMeshElementCollector::AddMesh and FBatchingSPDI::DrawMesh to catch attempts to render with a material not reported in GetUsedMaterials
* Fixed UParticleSystemComponent::GetUsedMaterials and UMaterialBillboardComponent::GetUsedMaterials
* FMaterialUpdateContext should be changed to use the same pattern, but that hasn't been done yet
Change 3220108 on 2016/12/02 by Daniel.Wright
Fixed shadowmap channel assignment for stationary lights which are not in a lighting scenario level, when a lighting scenario level is present
Change 3220504 on 2016/12/03 by Mark.Satterthwaite
Metal Desktop Tessellation support from Unicorn.
- Apple: Metal tessellation support added to MetalShaderFormat, MetalRHI and incl. changes to engine runtime/shaders for Desktop renderer and enabled in ElementalDemo by default (OS X 10.11 will run SM4).
- Epic: Support for different Metal shader standards on Mac, iOS & tvOS which required moving some RHI functions around as this is a project setting and not a compile-time constant.
- Epic: Fragment shader UAV support, which is also tied to newer Metal shader standard like Tessellation.
- Epic: Significant refactor of MetalRHI's internals to clearly separate state-caching from render-pass management and command-encoding.
- Epic: Internal MetalRHI validation code is now cleanly separated out into custom implementations of the Metal @protocol's and is on by default.
- Epic: Various fixes to Layered Rendering for Metal.
- Omits Mobile Tessellation support which needs further revision.
Change 3220881 on 2016/12/04 by Mark.Satterthwaite
Compiles fixes for iOS & static analysis fixes from Windows.
Change 3221180 on 2016/12/05 by Guillaume.Abadie
Avoid compiling PreviousFrameSwitch's both Current Frame and Previous Frame inputs every time.
Change 3221217 on 2016/12/05 by Chris.Bunner
More NVAPI warning fixups.
Change 3221219 on 2016/12/05 by Chris.Bunner
When comparing overriden properties used to force instance recompilation we need to check against the base material, not assume the immediate parent.
#jira UE-37792
Change 3221220 on 2016/12/05 by Chris.Bunner
Exported GetAllStaticSwitchParamNames and GetAllStaticComponentMaskParamNames.
#jira UE-35132
Change 3221221 on 2016/12/05 by Chris.Bunner
PR #2785: Fix comment typo in RendererInterface.h (Contributed by dustin-biser)
#jira UE-35760
Change 3221223 on 2016/12/05 by Chris.Bunner
Default to include dev-code when compiling material preview stats.
#jira UE-20321
Change 3221534 on 2016/12/05 by Rolando.Caloca
DR - Added FDynamicRHI::GetName()
Change 3221833 on 2016/12/05 by Chris.Bunner
Set correct output extent on PostProcessUpscale (allows users to extend chain correctly).
#jira UE-36989
Change 3221852 on 2016/12/05 by Chris.Bunner
32-bit/ch EXR screenshot and frame dump output.
Fixed row increment bug in 128-bit/px surface format readback.
#jira UE-37962
Change 3222059 on 2016/12/05 by Rolando.Caloca
DR - vk - Fix memory type not found
Change 3222104 on 2016/12/05 by Rolando.Caloca
DR - Lambdaize
- Added quicker method to check if system textures are initialized
Change 3222290 on 2016/12/05 by Mark.Satterthwaite
Trivial fixes to reporting Metal shader pipeline errors - need to check if Hull & Domain exist.
Change 3222864 on 2016/12/06 by Rolando.Caloca
DR - Fix mem leak when exiting
Change 3222873 on 2016/12/06 by Rolando.Caloca
DR - vk - Minor info to help track down leaks
Change 3222875 on 2016/12/06 by Rolando.Caloca
DR - Fix mem leak with VisualizeTexture
#jira UE-39360
Change 3223226 on 2016/12/06 by Chris.Bunner
Static analysis warning workaround.
Change 3223235 on 2016/12/06 by Ben.Woodhouse
Integrate from NREAL: Set a custom projection matrix on a SceneCapture2D
Change 3223343 on 2016/12/06 by Chris.Bunner
Moved HLOD persistent data to viewstate to fix per-view compatability.
#jira UE-37539
Change 3223349 on 2016/12/06 by Chris.Bunner
Fixed HLOD with FreezeRendering command.
#jira UE-29839
Change 3223371 on 2016/12/06 by Michael.Trepka
Removed obsolete check() in FMetalSurface constructor
Change 3223450 on 2016/12/06 by Chris.Bunner
Added explicit ScRGB output device selection rather than Nvidia-only hardcoded checks. Allows easier support for Mac and other devices moving forward.
Change 3223638 on 2016/12/06 by Michael.Trepka
Restored part of the check() in FMetalSurface constructor removed in CL 3223371
Change 3223642 on 2016/12/06 by Mark.Satterthwaite
Experimental Metal EDR/HDR output support for Mac (iOS/tvOS need custom formats & shaders so they are not supported yet).
- Only available on macOS Sierra (10.12) for Macs with HDR displays (e.g. Retina iMacs).
- Enable with -metaledr command-line argument as it is off-by-default.
- Sets up the CAMetalLayer & the back-buffer for RGBA_FP16 output on Mac using DCI-P3 as the color gamut and ACES 1000 nit ScRGB output encoding.
Change 3223830 on 2016/12/06 by Rolando.Caloca
DR - vk - Better error when finding an invalid Vulkan driver
#jira UE-37495
Change 3223869 on 2016/12/06 by Rolando.Caloca
DR - vk - Reuse fences
Change 3223906 on 2016/12/06 by Guillaume.Abadie
Fix alpha through TempAA artifact causing a small darker edge layouts.
Change 3224199 on 2016/12/06 by Mark.Satterthwaite
Fix a dumb copy-paste error from the HDR changes to Metal.
Change 3224220 on 2016/12/06 by Mark.Satterthwaite
Fix various errors with Metal UAV & Render-Pass Restart support so that we can use the Pixel Shader culling for DistanceField effects.
- Unfortunately Metal requires that a texture be bound to start a render-pass, so reuse the dummy depth-stencil surface from the problematic editor preview tile rendering.
Change 3224236 on 2016/12/06 by Mark.Satterthwaite
IWYU CIS compile fix for iOS.
Change 3224366 on 2016/12/06 by Mark.Satterthwaite
Simplify some of the changes from CL# 3224220 so that we don't perform unnecessary clears.
- If the RenderPass is broken to issue compute or blit operations then treat the cached RenderTargetsInfo as invalid, unless the RenderPass is restarted.
- This guarantees that we don't erroneously ignore calls to SetRenderTargets if the calling code issues a dispatch between two RenderPasses that use the same RenderTargetsInfo.
Change 3224416 on 2016/12/06 by Uriel.Doyon
New default implementation for UPrimitiveComponent::GetStreamingTextureInfo using a conservative heuristic where the textures are stretched across the bounds.
Optimized UPrimitiveComponent::GetStreamingTextureInfoWithNULLRemoval by not handling registered components with no proxy (essentially hidden game / collision primitives).
Added blueprint support for texture streaming built data through FStaticMeshComponentInstanceData.
Fix for material texture streaming data not being available on some cooked builds.
Enabled split requests on all texture load requests (first loading everything visible and then loaded everything not visible).
This is controlled by "r.Streaming.MinMipForSplitRequest" which defines the minimum mip for which to allow splitting.
Forced residency are now loaded in two steps (visible, then forced), improving reactiveness.
Updated "stat streaming" to include "UnkownRefMips" which represent texture with no known component referencing them,
and also "LastRenderTimeMips" which related to timed primitives.
Changed "Forced Mips" so that it only shows mips that are loaded become of forced residency.
"Texture Streaming Build" now updates the map check after execution.
Removed Orphaned texture logic as this has become irrelevant with the latest retention priority logic.
Updated "r.streaming.usenewmetrics" so that it shows behavior before and after 4.12 improvements.
Change 3224532 on 2016/12/07 by Uriel.Doyon
Integrated CL 3223965 :
Building texture streaming data for materials does not wait for pending shaders to finish compilation anymore.
Added more options to allow the user to cancel this build also.
Change 3224714 on 2016/12/07 by Ben.Woodhouse
Cherry pick CL 3223972 from //fortnite/main:
Disable Geometry shader onchip on XB1. This saves 4ms for a single shadow casting point light @ 512x512 (4.8ms to 1.8ms)
Change 3224715 on 2016/12/07 by Ben.Woodhouse
New version of d3dx12.h from Microsoft which incorporates my suggested static analysis fixes. This avoids us diverging from the official version
Change 3224975 on 2016/12/07 by Rolando.Caloca
DR - vk - Dump improvements
Change 3225012 on 2016/12/07 by Rolando.Caloca
DR - Show warning if trying to use num samples != (1,2,4,8,16)
Change 3225126 on 2016/12/07 by Chris.Bunner
Added 'force 128-bit rendering pipeline' to high-res screenshot tool.
#jira UE-39345
Change 3225449 on 2016/12/07 by Chris.Bunner
Updated engine rendering defaults to better match current best practices.
#jira UE-38081
Change 3225485 on 2016/12/07 by Chris.Bunner
Moved QuantizeSceneBufferSize to RenderCore and added call for PostProcess settings. Fixes screenpercentage out-of-bounds reads in some cases.
#jira UE-19394
Change 3225486 on 2016/12/07 by Chris.Bunner
Only disable TAA during HighResScreenshots if we don't have a reasonable frame-delay enabled.
Change 3225505 on 2016/12/07 by Daniel.Wright
Fixed exponential height fog disappearing with no skybox
Change 3225655 on 2016/12/07 by Benjamin.Hyder
Updating TM-Shadermodels to include Translucent lighting, Two sided, updated cloth animation, and adjusted lighting.
Change 3225668 on 2016/12/07 by Chris.Bunner
Dirty owning packages when user manually forces regeneration of all reflection captures.
#jira UE-38759
Change 3226139 on 2016/12/07 by Rolando.Caloca
DR - Fix recompute tangents disabling skin cache
- Make some macros into lambdas
#jira UE-39143
Change 3226212 on 2016/12/07 by Daniel.Wright
Features which require a full prepass use DDM_AllOpaque instead of DDM_AllOccluders, which can be skipped if the component has bUseAsOccluder=false
Change 3226213 on 2016/12/07 by Daniel.Wright
Scene Capture 2D can specify a global clip plane, which is useful for portals
* Requires the global clip plane project setting to be enabled
Change 3226214 on 2016/12/07 by Daniel.Wright
Improved deferred shadowing with MSAA by upsampling light attenuation intelligently in the base pass
* If the current fragment's depth doesn't match what was used for deferred shadowing, the neighbor (cross pattern) with the nearest depth's shadowing is used
* Edge artifacts can still occur where the upsample fails or the shadow factor was computed per-sample due to depth / stencil testing
* Indirect Occlusion from capsule shadows also uses the nearest depth neighbor UV for no extra cost
* Base pass on 970 GTX 1.69ms -> 1.85ms (.16ms) in RoboRecall
Change 3226258 on 2016/12/07 by Rolando.Caloca
DR - Typo fix
Change 3226259 on 2016/12/07 by Rolando.Caloca
DR - compile fix
#jira UE-39143
Change 3226932 on 2016/12/08 by Chris.Bunner
Re-saved Infiltrator maps to update reflection captures.
#jira UE-38759
Change 3227063 on 2016/12/08 by Mark.Satterthwaite
For Metal platforms ONLY temporarily disable USE_LIGHT_GRID_REFLECTION_CAPTURE_CULLING to avoid UE-37436 while the Nvidia driver team investigate why this doesn't work for them but does for the others. This won't affect non-Metal platforms and the intent is to revert this prior to 4.16 provided we can work through the problem with Nvidia.
#jira UE-37436
Change 3227120 on 2016/12/08 by Gil.Gribb
Merging //UE4/Dev-Main@3226895 to Dev-Rendering (//UE4/Dev-Rendering)
Change 3227211 on 2016/12/08 by Arne.Schober
DR - UE-38585 - Fixing crash where HierInstStaticMesh duplication fails. Also reverting the fix from UE-28189 which is redundant.
Change 3227257 on 2016/12/08 by Marc.Olano
Extension to PseudoVolumeTexture for more flexible layout
Change by ryan.brucks
Change 3227286 on 2016/12/08 by Rolando.Caloca
DR - Fix crash when using custom expressions and using reserved keywords
#jira UE-39311
Change 3227376 on 2016/12/08 by Mark.Satterthwaite
Must not include a private header inside the MenuStack public header as that causes compile errors in plugins.
Change 3227415 on 2016/12/08 by Mark.Satterthwaite
Fix shader compilation due to my disabling of USE_LIGHT_GRID_REFLECTION_CAPTURE_CULLING on Metal - InstancedCompositeTileReflectionCaptureIndices needs to be defined even though Metal doesn't support instanced-stereo rendering.
Change 3227516 on 2016/12/08 by Daniel.Wright
Implemented UWidgetComponent::GetUsedMaterials
Change 3227521 on 2016/12/08 by Guillaume.Abadie
Fixes post process volume's indirect lighting color.
#jira UE-38888
Change 3227567 on 2016/12/08 by Marc.Olano
New upscale filters: Lanczos-2 (new default), Lanczos-3 and Gaussian Unsharp Mask
Change 3227628 on 2016/12/08 by Daniel.Wright
Removed redundant ResolveSceneDepthTexture from the merge
Change 3227635 on 2016/12/08 by Daniel.Wright
Forward renderer supports shadowing from movable lights and light functions
* Only 4 shadow casting movable or stationary lights can overlap at any point in space, otherwise the movable lights will lose their shadows and an on-screen message will be displayed
* Light functions only work on shadow casting lights since they need a shadowmap channel to be assigned
Change 3227660 on 2016/12/08 by Rolando.Caloca
DR - vk - Fix r.MobileMSAA on Vulkan
- r.MobileMSAA is now read-only (to be fixed on 4.16)
- Show time for PSO creation hitches
#jira UE-39184
Change 3227704 on 2016/12/08 by Mark.Satterthwaite
Fix Mac HDR causing incorrect output color encoding being used, HDR support is now entirely off unless you pass -metaledr which will enable it regardless of whether the current display supports HDR (as we haven't written the detection code yet). Fixed the LUT/UI compositing along the way - Mac Metal wasn't using volume LUT as it should have been, RHISupportsVertexShaderLayer now correctly returns false for non-Mac Metal platforms.
Change 3227705 on 2016/12/08 by Daniel.Wright
Replaced built-in samplers in the nearest depth translucency upsample because the built-in samplers are no longer bound on PC (cl 2852426)
Change 3227787 on 2016/12/08 by Chris.Bunner
Added extent clear to motion blur pass to catch misized buffers bringing in errors.
Added early out to clear call when excluded region matches RT region.
#jira UE-39437
Change 3228177 on 2016/12/08 by Marc.Olano
Fix DCC sqrt(int) error
Change 3228285 on 2016/12/08 by Chris.Bunner
Back out changelist 3225449.
#jira UE-39528
Change 3228680 on 2016/12/09 by Gil.Gribb
Merging //UE4/Dev-Main@3228528 to Dev-Rendering (//UE4/Dev-Rendering)
Change 3228940 on 2016/12/09 by Mark.Satterthwaite
Editor fixes for 4.15:
- PostProcessTonemap can't fail to bind a texture to the ColorLUT or the subsequent rendering will be garbage: the changes for optimising stereo rendering forgot to account for the Editor's use of Views without States for the asset preview thumbnails. Amended the CombineLUT post-processing to allocate a local output texture when there's no ViewState and read from this when this situation arises which makes everything function again.
- Don't start render-passes without a valid render-target-array in MetalRHI.
Change 3228950 on 2016/12/09 by Mark.Satterthwaite
Make GPUSkinCache run on Mac Metal - it wasn't working because it was forcibly disabled on all platforms but for Windows D3D 11.
- Fixed the Skeleton editor tree trying to access a widget before it has been constructed.
- Enable GPUSkinCache for Metal SM5: doesn't render correctly, even on AMD, so needs Radar's filing and investigation.
#jira UE-39256
Change 3229013 on 2016/12/09 by Mark.Satterthwaite
Further tidy up in SSkeletonTreeView as suggested by Nick.A.
Change 3229101 on 2016/12/09 by Chris.Bunner
Log compile error fix and updated cvar comments.
Change 3229236 on 2016/12/09 by Ben.Woodhouse
XB1 D3D11 and D3D12: Use the DXGI frame statistics to get accurate GPU time unaffected by bubbles
Change 3229430 on 2016/12/09 by Ben.Woodhouse
PR #2680: Optimized histogram generation. (Contributed by PjotrSvetachov)
Profiled on nvidia 980GTX (2x faster), and on XB1 (marginally faster)
Change 3229580 on 2016/12/09 by Marcus.Wassmer
DepthBoundsTest for AMD.
Change 3229701 on 2016/12/09 by Michael.Trepka
Changed "OS X" to "macOS" in few places where we display it and updated the code that asks users to update to latest version to check for 10.12.2
Change 3229706 on 2016/12/09 by Chris.Bunner
Added GameUserSettings controls for HDR display output.
Removed Metal commandline as this should replace the need for it.
Change 3229774 on 2016/12/09 by Michael.Trepka
Disabled OpenGL on Mac. -opengl is now ignored, we always use Metal. On old Macs that do not support Metal we show a message saying that the app requires Metal and exit.
Change 3229819 on 2016/12/09 by Chris.Bunner
Updated engine rendering defaults to better match current best practices.
#jira UE-38081
Change 3229948 on 2016/12/09 by Rolando.Caloca
DR - Fix d3d debug error
#jira UE-39589
Change 3230341 on 2016/12/11 by Mark.Satterthwaite
Don't fatally assert that the game-thread stalled waiting for the rendering thread in the Editor executable, even when running -game as the rendering thread can take a while to respond if shaders need to be compiled.
#jira UE-39613
Change 3230860 on 2016/12/12 by Marcus.Wassmer
Experimental Nvidia AFR support.
Change 3230930 on 2016/12/12 by Mark.Satterthwaite
Disable RHICmdList state-caching on Mac - Metal already does this internally and depends on receiving all state changes in order to function.
Change 3231252 on 2016/12/12 by Marcus.Wassmer
Fix NumGPU detection. (SLI only crash)
Change 3231486 on 2016/12/12 by Mark.Satterthwaite
Fix a stupid mistake in MetalStateCache::CommitResourceTable that would unnecessarily rebind samplers.
Change 3231661 on 2016/12/12 by Mark.Satterthwaite
Retain the RHI samplers in MetalRHI to guarantee lifetime.
[CL 3231696 by Gil Gribb in Main branch]
2016-12-12 17:47:42 -05:00
2021-05-18 09:39:29 -04:00
TShaderMapRef < FEyeAdaptationCS > ComputeShader ( View . ShaderMap ) ;
FComputeShaderUtils : : AddPass (
GraphBuilder ,
RDG_EVENT_NAME ( " HistogramEyeAdaptation (CS) " ) ,
ComputeShader ,
PassParameters ,
FIntVector ( 1 , 1 , 1 ) ) ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3231693)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3219796 on 2016/12/02 by Rolando.Caloca
DR - vk - Increase timeout to 60ms
Change 3219884 on 2016/12/02 by Daniel.Wright
Assert to help track down rare crash locking capsule indirect shadow vertex buffer
Change 3219885 on 2016/12/02 by Daniel.Wright
Fixed saving a package that doesn't exist on disk but exists in p4 at a newer revision when the user chooses 'Mark Writable'
Change 3219886 on 2016/12/02 by Daniel.Wright
Don't create projected shadows when r.ShadowQuality is 0
* Fixes crash in the forward path trying to render shadows
* In the deferred path, the shadowmap was still being rendered and only the projection skipped, now all cost will be skipped
Change 3219887 on 2016/12/02 by Daniel.Wright
Changed ClearRenderTarget2D default alpha to 1, which is necessary for correct compositing
Change 3219893 on 2016/12/02 by Daniel.Wright
AMD AGS library with approved TPS
Disabled DFAO on AMD pre-GCN PC video cards to workaround a driver bug which won't be fixed (Radeon 6xxx and below)
Change 3219913 on 2016/12/02 by Daniel.Wright
Level unload of a lighting scenario propagates the lighting scenario change - fixes crash when precomputed lighting volume data gets unloaded
Change 3220029 on 2016/12/02 by Daniel.Wright
Async shader compiling now recreates scene proxies which are affected by the material which was compiled. This fixes crashes which were occuring as proxies cache various material properties, but applying compiled materials would not update these cached properties (bRequiresAdjacencyInformation).
* A new ensure has been added in FMeshElementCollector::AddMesh and FBatchingSPDI::DrawMesh to catch attempts to render with a material not reported in GetUsedMaterials
* Fixed UParticleSystemComponent::GetUsedMaterials and UMaterialBillboardComponent::GetUsedMaterials
* FMaterialUpdateContext should be changed to use the same pattern, but that hasn't been done yet
Change 3220108 on 2016/12/02 by Daniel.Wright
Fixed shadowmap channel assignment for stationary lights which are not in a lighting scenario level, when a lighting scenario level is present
Change 3220504 on 2016/12/03 by Mark.Satterthwaite
Metal Desktop Tessellation support from Unicorn.
- Apple: Metal tessellation support added to MetalShaderFormat, MetalRHI and incl. changes to engine runtime/shaders for Desktop renderer and enabled in ElementalDemo by default (OS X 10.11 will run SM4).
- Epic: Support for different Metal shader standards on Mac, iOS & tvOS which required moving some RHI functions around as this is a project setting and not a compile-time constant.
- Epic: Fragment shader UAV support, which is also tied to newer Metal shader standard like Tessellation.
- Epic: Significant refactor of MetalRHI's internals to clearly separate state-caching from render-pass management and command-encoding.
- Epic: Internal MetalRHI validation code is now cleanly separated out into custom implementations of the Metal @protocol's and is on by default.
- Epic: Various fixes to Layered Rendering for Metal.
- Omits Mobile Tessellation support which needs further revision.
Change 3220881 on 2016/12/04 by Mark.Satterthwaite
Compiles fixes for iOS & static analysis fixes from Windows.
Change 3221180 on 2016/12/05 by Guillaume.Abadie
Avoid compiling PreviousFrameSwitch's both Current Frame and Previous Frame inputs every time.
Change 3221217 on 2016/12/05 by Chris.Bunner
More NVAPI warning fixups.
Change 3221219 on 2016/12/05 by Chris.Bunner
When comparing overriden properties used to force instance recompilation we need to check against the base material, not assume the immediate parent.
#jira UE-37792
Change 3221220 on 2016/12/05 by Chris.Bunner
Exported GetAllStaticSwitchParamNames and GetAllStaticComponentMaskParamNames.
#jira UE-35132
Change 3221221 on 2016/12/05 by Chris.Bunner
PR #2785: Fix comment typo in RendererInterface.h (Contributed by dustin-biser)
#jira UE-35760
Change 3221223 on 2016/12/05 by Chris.Bunner
Default to include dev-code when compiling material preview stats.
#jira UE-20321
Change 3221534 on 2016/12/05 by Rolando.Caloca
DR - Added FDynamicRHI::GetName()
Change 3221833 on 2016/12/05 by Chris.Bunner
Set correct output extent on PostProcessUpscale (allows users to extend chain correctly).
#jira UE-36989
Change 3221852 on 2016/12/05 by Chris.Bunner
32-bit/ch EXR screenshot and frame dump output.
Fixed row increment bug in 128-bit/px surface format readback.
#jira UE-37962
Change 3222059 on 2016/12/05 by Rolando.Caloca
DR - vk - Fix memory type not found
Change 3222104 on 2016/12/05 by Rolando.Caloca
DR - Lambdaize
- Added quicker method to check if system textures are initialized
Change 3222290 on 2016/12/05 by Mark.Satterthwaite
Trivial fixes to reporting Metal shader pipeline errors - need to check if Hull & Domain exist.
Change 3222864 on 2016/12/06 by Rolando.Caloca
DR - Fix mem leak when exiting
Change 3222873 on 2016/12/06 by Rolando.Caloca
DR - vk - Minor info to help track down leaks
Change 3222875 on 2016/12/06 by Rolando.Caloca
DR - Fix mem leak with VisualizeTexture
#jira UE-39360
Change 3223226 on 2016/12/06 by Chris.Bunner
Static analysis warning workaround.
Change 3223235 on 2016/12/06 by Ben.Woodhouse
Integrate from NREAL: Set a custom projection matrix on a SceneCapture2D
Change 3223343 on 2016/12/06 by Chris.Bunner
Moved HLOD persistent data to viewstate to fix per-view compatability.
#jira UE-37539
Change 3223349 on 2016/12/06 by Chris.Bunner
Fixed HLOD with FreezeRendering command.
#jira UE-29839
Change 3223371 on 2016/12/06 by Michael.Trepka
Removed obsolete check() in FMetalSurface constructor
Change 3223450 on 2016/12/06 by Chris.Bunner
Added explicit ScRGB output device selection rather than Nvidia-only hardcoded checks. Allows easier support for Mac and other devices moving forward.
Change 3223638 on 2016/12/06 by Michael.Trepka
Restored part of the check() in FMetalSurface constructor removed in CL 3223371
Change 3223642 on 2016/12/06 by Mark.Satterthwaite
Experimental Metal EDR/HDR output support for Mac (iOS/tvOS need custom formats & shaders so they are not supported yet).
- Only available on macOS Sierra (10.12) for Macs with HDR displays (e.g. Retina iMacs).
- Enable with -metaledr command-line argument as it is off-by-default.
- Sets up the CAMetalLayer & the back-buffer for RGBA_FP16 output on Mac using DCI-P3 as the color gamut and ACES 1000 nit ScRGB output encoding.
Change 3223830 on 2016/12/06 by Rolando.Caloca
DR - vk - Better error when finding an invalid Vulkan driver
#jira UE-37495
Change 3223869 on 2016/12/06 by Rolando.Caloca
DR - vk - Reuse fences
Change 3223906 on 2016/12/06 by Guillaume.Abadie
Fix alpha through TempAA artifact causing a small darker edge layouts.
Change 3224199 on 2016/12/06 by Mark.Satterthwaite
Fix a dumb copy-paste error from the HDR changes to Metal.
Change 3224220 on 2016/12/06 by Mark.Satterthwaite
Fix various errors with Metal UAV & Render-Pass Restart support so that we can use the Pixel Shader culling for DistanceField effects.
- Unfortunately Metal requires that a texture be bound to start a render-pass, so reuse the dummy depth-stencil surface from the problematic editor preview tile rendering.
Change 3224236 on 2016/12/06 by Mark.Satterthwaite
IWYU CIS compile fix for iOS.
Change 3224366 on 2016/12/06 by Mark.Satterthwaite
Simplify some of the changes from CL# 3224220 so that we don't perform unnecessary clears.
- If the RenderPass is broken to issue compute or blit operations then treat the cached RenderTargetsInfo as invalid, unless the RenderPass is restarted.
- This guarantees that we don't erroneously ignore calls to SetRenderTargets if the calling code issues a dispatch between two RenderPasses that use the same RenderTargetsInfo.
Change 3224416 on 2016/12/06 by Uriel.Doyon
New default implementation for UPrimitiveComponent::GetStreamingTextureInfo using a conservative heuristic where the textures are stretched across the bounds.
Optimized UPrimitiveComponent::GetStreamingTextureInfoWithNULLRemoval by not handling registered components with no proxy (essentially hidden game / collision primitives).
Added blueprint support for texture streaming built data through FStaticMeshComponentInstanceData.
Fix for material texture streaming data not being available on some cooked builds.
Enabled split requests on all texture load requests (first loading everything visible and then loaded everything not visible).
This is controlled by "r.Streaming.MinMipForSplitRequest" which defines the minimum mip for which to allow splitting.
Forced residency are now loaded in two steps (visible, then forced), improving reactiveness.
Updated "stat streaming" to include "UnkownRefMips" which represent texture with no known component referencing them,
and also "LastRenderTimeMips" which related to timed primitives.
Changed "Forced Mips" so that it only shows mips that are loaded become of forced residency.
"Texture Streaming Build" now updates the map check after execution.
Removed Orphaned texture logic as this has become irrelevant with the latest retention priority logic.
Updated "r.streaming.usenewmetrics" so that it shows behavior before and after 4.12 improvements.
Change 3224532 on 2016/12/07 by Uriel.Doyon
Integrated CL 3223965 :
Building texture streaming data for materials does not wait for pending shaders to finish compilation anymore.
Added more options to allow the user to cancel this build also.
Change 3224714 on 2016/12/07 by Ben.Woodhouse
Cherry pick CL 3223972 from //fortnite/main:
Disable Geometry shader onchip on XB1. This saves 4ms for a single shadow casting point light @ 512x512 (4.8ms to 1.8ms)
Change 3224715 on 2016/12/07 by Ben.Woodhouse
New version of d3dx12.h from Microsoft which incorporates my suggested static analysis fixes. This avoids us diverging from the official version
Change 3224975 on 2016/12/07 by Rolando.Caloca
DR - vk - Dump improvements
Change 3225012 on 2016/12/07 by Rolando.Caloca
DR - Show warning if trying to use num samples != (1,2,4,8,16)
Change 3225126 on 2016/12/07 by Chris.Bunner
Added 'force 128-bit rendering pipeline' to high-res screenshot tool.
#jira UE-39345
Change 3225449 on 2016/12/07 by Chris.Bunner
Updated engine rendering defaults to better match current best practices.
#jira UE-38081
Change 3225485 on 2016/12/07 by Chris.Bunner
Moved QuantizeSceneBufferSize to RenderCore and added call for PostProcess settings. Fixes screenpercentage out-of-bounds reads in some cases.
#jira UE-19394
Change 3225486 on 2016/12/07 by Chris.Bunner
Only disable TAA during HighResScreenshots if we don't have a reasonable frame-delay enabled.
Change 3225505 on 2016/12/07 by Daniel.Wright
Fixed exponential height fog disappearing with no skybox
Change 3225655 on 2016/12/07 by Benjamin.Hyder
Updating TM-Shadermodels to include Translucent lighting, Two sided, updated cloth animation, and adjusted lighting.
Change 3225668 on 2016/12/07 by Chris.Bunner
Dirty owning packages when user manually forces regeneration of all reflection captures.
#jira UE-38759
Change 3226139 on 2016/12/07 by Rolando.Caloca
DR - Fix recompute tangents disabling skin cache
- Make some macros into lambdas
#jira UE-39143
Change 3226212 on 2016/12/07 by Daniel.Wright
Features which require a full prepass use DDM_AllOpaque instead of DDM_AllOccluders, which can be skipped if the component has bUseAsOccluder=false
Change 3226213 on 2016/12/07 by Daniel.Wright
Scene Capture 2D can specify a global clip plane, which is useful for portals
* Requires the global clip plane project setting to be enabled
Change 3226214 on 2016/12/07 by Daniel.Wright
Improved deferred shadowing with MSAA by upsampling light attenuation intelligently in the base pass
* If the current fragment's depth doesn't match what was used for deferred shadowing, the neighbor (cross pattern) with the nearest depth's shadowing is used
* Edge artifacts can still occur where the upsample fails or the shadow factor was computed per-sample due to depth / stencil testing
* Indirect Occlusion from capsule shadows also uses the nearest depth neighbor UV for no extra cost
* Base pass on 970 GTX 1.69ms -> 1.85ms (.16ms) in RoboRecall
Change 3226258 on 2016/12/07 by Rolando.Caloca
DR - Typo fix
Change 3226259 on 2016/12/07 by Rolando.Caloca
DR - compile fix
#jira UE-39143
Change 3226932 on 2016/12/08 by Chris.Bunner
Re-saved Infiltrator maps to update reflection captures.
#jira UE-38759
Change 3227063 on 2016/12/08 by Mark.Satterthwaite
For Metal platforms ONLY temporarily disable USE_LIGHT_GRID_REFLECTION_CAPTURE_CULLING to avoid UE-37436 while the Nvidia driver team investigate why this doesn't work for them but does for the others. This won't affect non-Metal platforms and the intent is to revert this prior to 4.16 provided we can work through the problem with Nvidia.
#jira UE-37436
Change 3227120 on 2016/12/08 by Gil.Gribb
Merging //UE4/Dev-Main@3226895 to Dev-Rendering (//UE4/Dev-Rendering)
Change 3227211 on 2016/12/08 by Arne.Schober
DR - UE-38585 - Fixing crash where HierInstStaticMesh duplication fails. Also reverting the fix from UE-28189 which is redundant.
Change 3227257 on 2016/12/08 by Marc.Olano
Extension to PseudoVolumeTexture for more flexible layout
Change by ryan.brucks
Change 3227286 on 2016/12/08 by Rolando.Caloca
DR - Fix crash when using custom expressions and using reserved keywords
#jira UE-39311
Change 3227376 on 2016/12/08 by Mark.Satterthwaite
Must not include a private header inside the MenuStack public header as that causes compile errors in plugins.
Change 3227415 on 2016/12/08 by Mark.Satterthwaite
Fix shader compilation due to my disabling of USE_LIGHT_GRID_REFLECTION_CAPTURE_CULLING on Metal - InstancedCompositeTileReflectionCaptureIndices needs to be defined even though Metal doesn't support instanced-stereo rendering.
Change 3227516 on 2016/12/08 by Daniel.Wright
Implemented UWidgetComponent::GetUsedMaterials
Change 3227521 on 2016/12/08 by Guillaume.Abadie
Fixes post process volume's indirect lighting color.
#jira UE-38888
Change 3227567 on 2016/12/08 by Marc.Olano
New upscale filters: Lanczos-2 (new default), Lanczos-3 and Gaussian Unsharp Mask
Change 3227628 on 2016/12/08 by Daniel.Wright
Removed redundant ResolveSceneDepthTexture from the merge
Change 3227635 on 2016/12/08 by Daniel.Wright
Forward renderer supports shadowing from movable lights and light functions
* Only 4 shadow casting movable or stationary lights can overlap at any point in space, otherwise the movable lights will lose their shadows and an on-screen message will be displayed
* Light functions only work on shadow casting lights since they need a shadowmap channel to be assigned
Change 3227660 on 2016/12/08 by Rolando.Caloca
DR - vk - Fix r.MobileMSAA on Vulkan
- r.MobileMSAA is now read-only (to be fixed on 4.16)
- Show time for PSO creation hitches
#jira UE-39184
Change 3227704 on 2016/12/08 by Mark.Satterthwaite
Fix Mac HDR causing incorrect output color encoding being used, HDR support is now entirely off unless you pass -metaledr which will enable it regardless of whether the current display supports HDR (as we haven't written the detection code yet). Fixed the LUT/UI compositing along the way - Mac Metal wasn't using volume LUT as it should have been, RHISupportsVertexShaderLayer now correctly returns false for non-Mac Metal platforms.
Change 3227705 on 2016/12/08 by Daniel.Wright
Replaced built-in samplers in the nearest depth translucency upsample because the built-in samplers are no longer bound on PC (cl 2852426)
Change 3227787 on 2016/12/08 by Chris.Bunner
Added extent clear to motion blur pass to catch misized buffers bringing in errors.
Added early out to clear call when excluded region matches RT region.
#jira UE-39437
Change 3228177 on 2016/12/08 by Marc.Olano
Fix DCC sqrt(int) error
Change 3228285 on 2016/12/08 by Chris.Bunner
Back out changelist 3225449.
#jira UE-39528
Change 3228680 on 2016/12/09 by Gil.Gribb
Merging //UE4/Dev-Main@3228528 to Dev-Rendering (//UE4/Dev-Rendering)
Change 3228940 on 2016/12/09 by Mark.Satterthwaite
Editor fixes for 4.15:
- PostProcessTonemap can't fail to bind a texture to the ColorLUT or the subsequent rendering will be garbage: the changes for optimising stereo rendering forgot to account for the Editor's use of Views without States for the asset preview thumbnails. Amended the CombineLUT post-processing to allocate a local output texture when there's no ViewState and read from this when this situation arises which makes everything function again.
- Don't start render-passes without a valid render-target-array in MetalRHI.
Change 3228950 on 2016/12/09 by Mark.Satterthwaite
Make GPUSkinCache run on Mac Metal - it wasn't working because it was forcibly disabled on all platforms but for Windows D3D 11.
- Fixed the Skeleton editor tree trying to access a widget before it has been constructed.
- Enable GPUSkinCache for Metal SM5: doesn't render correctly, even on AMD, so needs Radar's filing and investigation.
#jira UE-39256
Change 3229013 on 2016/12/09 by Mark.Satterthwaite
Further tidy up in SSkeletonTreeView as suggested by Nick.A.
Change 3229101 on 2016/12/09 by Chris.Bunner
Log compile error fix and updated cvar comments.
Change 3229236 on 2016/12/09 by Ben.Woodhouse
XB1 D3D11 and D3D12: Use the DXGI frame statistics to get accurate GPU time unaffected by bubbles
Change 3229430 on 2016/12/09 by Ben.Woodhouse
PR #2680: Optimized histogram generation. (Contributed by PjotrSvetachov)
Profiled on nvidia 980GTX (2x faster), and on XB1 (marginally faster)
Change 3229580 on 2016/12/09 by Marcus.Wassmer
DepthBoundsTest for AMD.
Change 3229701 on 2016/12/09 by Michael.Trepka
Changed "OS X" to "macOS" in few places where we display it and updated the code that asks users to update to latest version to check for 10.12.2
Change 3229706 on 2016/12/09 by Chris.Bunner
Added GameUserSettings controls for HDR display output.
Removed Metal commandline as this should replace the need for it.
Change 3229774 on 2016/12/09 by Michael.Trepka
Disabled OpenGL on Mac. -opengl is now ignored, we always use Metal. On old Macs that do not support Metal we show a message saying that the app requires Metal and exit.
Change 3229819 on 2016/12/09 by Chris.Bunner
Updated engine rendering defaults to better match current best practices.
#jira UE-38081
Change 3229948 on 2016/12/09 by Rolando.Caloca
DR - Fix d3d debug error
#jira UE-39589
Change 3230341 on 2016/12/11 by Mark.Satterthwaite
Don't fatally assert that the game-thread stalled waiting for the rendering thread in the Editor executable, even when running -game as the rendering thread can take a while to respond if shaders need to be compiled.
#jira UE-39613
Change 3230860 on 2016/12/12 by Marcus.Wassmer
Experimental Nvidia AFR support.
Change 3230930 on 2016/12/12 by Mark.Satterthwaite
Disable RHICmdList state-caching on Mac - Metal already does this internally and depends on receiving all state changes in order to function.
Change 3231252 on 2016/12/12 by Marcus.Wassmer
Fix NumGPU detection. (SLI only crash)
Change 3231486 on 2016/12/12 by Mark.Satterthwaite
Fix a stupid mistake in MetalStateCache::CommitResourceTable that would unnecessarily rebind samplers.
Change 3231661 on 2016/12/12 by Mark.Satterthwaite
Retain the RHI samplers in MetalRHI to guarantee lifetime.
[CL 3231696 by Gil Gribb in Main branch]
2016-12-12 17:47:42 -05:00
2021-11-18 14:37:34 -05:00
View . EnqueueEyeAdaptationExposureTextureReadback ( GraphBuilder ) ;
2019-08-13 18:15:27 -04:00
return OutputTexture ;
2015-12-10 21:55:37 -05:00
}
2019-08-14 14:02:54 -04:00
//////////////////////////////////////////////////////////////////////////
//! Basic Eye Adaptation
//////////////////////////////////////////////////////////////////////////
2015-12-10 21:55:37 -05:00
2019-08-14 17:43:15 -04:00
/** Computes scaled and biased luma for the input scene color and puts it in the alpha channel. */
class FBasicEyeAdaptationSetupPS : public FGlobalShader
2015-12-10 21:55:37 -05:00
{
2019-08-14 14:02:54 -04:00
public :
2019-08-14 17:43:15 -04:00
DECLARE_GLOBAL_SHADER ( FBasicEyeAdaptationSetupPS ) ;
SHADER_USE_PARAMETER_STRUCT ( FBasicEyeAdaptationSetupPS , FGlobalShader ) ;
2015-12-10 21:55:37 -05:00
2019-08-14 17:43:15 -04:00
BEGIN_SHADER_PARAMETER_STRUCT ( FParameters , )
SHADER_PARAMETER_STRUCT ( FEyeAdaptationParameters , EyeAdaptation )
SHADER_PARAMETER_RDG_TEXTURE ( Texture2D , ColorTexture )
SHADER_PARAMETER_SAMPLER ( SamplerState , ColorSampler )
RENDER_TARGET_BINDING_SLOTS ( )
2020-09-24 00:43:27 -04:00
END_SHADER_PARAMETER_STRUCT ( )
2019-04-22 11:46:24 -04:00
2020-09-24 00:43:27 -04:00
static bool ShouldCompilePermutation ( const FGlobalShaderPermutationParameters & Parameters )
2019-04-22 11:46:24 -04:00
{
2021-08-03 11:56:47 -04:00
return IsFeatureLevelSupported ( Parameters . Platform , ERHIFeatureLevel : : Type ( GetBasicEyeAdaptationMinFeatureLevel ( ) ) ) ;
2019-04-22 11:46:24 -04:00
}
2015-12-10 21:55:37 -05:00
} ;
2019-08-14 17:43:15 -04:00
IMPLEMENT_GLOBAL_SHADER ( FBasicEyeAdaptationSetupPS , " /Engine/Private/PostProcessEyeAdaptation.usf " , " BasicEyeAdaptationSetupPS " , SF_Pixel ) ;
2015-12-10 21:55:37 -05:00
2019-10-01 13:03:04 -04:00
FScreenPassTexture AddBasicEyeAdaptationSetupPass (
2019-08-14 14:02:54 -04:00
FRDGBuilder & GraphBuilder ,
2019-10-01 13:03:04 -04:00
const FViewInfo & View ,
2019-08-14 14:02:54 -04:00
const FEyeAdaptationParameters & EyeAdaptationParameters ,
2019-10-01 13:03:04 -04:00
FScreenPassTexture SceneColor )
2015-12-10 21:55:37 -05:00
{
2019-10-01 13:03:04 -04:00
check ( SceneColor . IsValid ( ) ) ;
2015-12-10 21:55:37 -05:00
2019-10-01 13:03:04 -04:00
FRDGTextureDesc OutputDesc = SceneColor . Texture - > Desc ;
2019-08-14 14:02:54 -04:00
OutputDesc . Reset ( ) ;
2015-12-10 21:55:37 -05:00
// Require alpha channel for log2 information.
2019-08-14 14:02:54 -04:00
OutputDesc . Format = PF_FloatRGBA ;
OutputDesc . Flags | = GFastVRamConfig . EyeAdaptation ;
FRDGTextureRef OutputTexture = GraphBuilder . CreateTexture ( OutputDesc , TEXT ( " BasicEyeAdaptationSetup " ) ) ;
2019-10-01 13:03:04 -04:00
const FScreenPassTextureViewport Viewport ( SceneColor ) ;
2019-08-14 14:02:54 -04:00
FBasicEyeAdaptationSetupPS : : FParameters * PassParameters = GraphBuilder . AllocParameters < FBasicEyeAdaptationSetupPS : : FParameters > ( ) ;
2019-09-03 19:19:28 -04:00
PassParameters - > EyeAdaptation = EyeAdaptationParameters ;
2019-10-01 13:03:04 -04:00
PassParameters - > ColorTexture = SceneColor . Texture ;
2019-08-14 17:43:15 -04:00
PassParameters - > ColorSampler = TStaticSamplerState < SF_Point , AM_Clamp , AM_Clamp , AM_Clamp > : : GetRHI ( ) ;
2019-10-01 13:03:04 -04:00
PassParameters - > RenderTargets [ 0 ] = FRenderTargetBinding ( OutputTexture , View . GetOverwriteLoadAction ( ) ) ;
2019-08-14 14:02:54 -04:00
2019-10-01 13:03:04 -04:00
TShaderMapRef < FBasicEyeAdaptationSetupPS > PixelShader ( View . ShaderMap ) ;
2019-08-14 14:02:54 -04:00
AddDrawScreenPass (
GraphBuilder ,
RDG_EVENT_NAME ( " BasicEyeAdaptationSetup (PS) %dx%d " , Viewport . Rect . Width ( ) , Viewport . Rect . Height ( ) ) ,
2019-10-01 13:03:04 -04:00
View ,
2019-08-14 14:02:54 -04:00
Viewport ,
Viewport ,
2020-02-06 13:13:41 -05:00
PixelShader ,
2019-10-01 13:03:04 -04:00
PassParameters ,
EScreenPassDrawFlags : : AllowHMDHiddenAreaMask ) ;
2019-08-14 14:02:54 -04:00
2019-10-01 13:03:04 -04:00
return FScreenPassTexture ( OutputTexture , SceneColor . ViewRect ) ;
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
}
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
2019-08-14 17:43:15 -04:00
class FBasicEyeAdaptationShader : public FGlobalShader
2019-06-11 18:27:07 -04:00
{
2015-12-10 21:55:37 -05:00
public :
2019-08-13 16:12:20 -04:00
BEGIN_SHADER_PARAMETER_STRUCT ( FParameters , )
2019-08-14 17:43:15 -04:00
SHADER_PARAMETER_STRUCT_REF ( FViewUniformShaderParameters , View )
2019-08-13 16:12:20 -04:00
SHADER_PARAMETER_STRUCT ( FEyeAdaptationParameters , EyeAdaptation )
2019-08-14 17:43:15 -04:00
SHADER_PARAMETER_STRUCT ( FScreenPassTextureViewportParameters , Color )
SHADER_PARAMETER_RDG_TEXTURE ( Texture2D , ColorTexture )
SHADER_PARAMETER_RDG_TEXTURE ( Texture2D , EyeAdaptationTexture )
2020-09-24 00:43:27 -04:00
END_SHADER_PARAMETER_STRUCT ( )
2015-12-10 21:55:37 -05:00
2020-09-24 00:43:27 -04:00
static const EPixelFormat OutputFormat = PF_A32B32G32R32F ;
2019-04-29 11:59:36 -04:00
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3809756)
#rb None
#lockdown Nick.Penwarden
============================
MAJOR FEATURES & CHANGES
============================
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3761370 by Arne.Schober
DR - Added CityHash to use with conatiners and stuff. It provides good performance and high quallity across multiple platforms.
Change 3761437 by Guillaume.Abadie
Optimises motion blur compute shader for consoles.
Change 3761483 by Guillaume.Abadie
Fixes D3D11 RHI lying to dynamic resolution heuristic with t.MaxFPS.
Change 3761995 by Mark.Satterthwaite
Add the Metal compiler path to the local .pch filename to avoid problems when Xcode moves.
Change 3761996 by Mark.Satterthwaite
Emit more details when a pixel shader is found to have no outputs at all which Metal doesn't permit. More likely this is a bug in the shader compiler not configuring the in-out mask correctly...
#jira UE-52292
Change 3761999 by Mark.Satterthwaite
No need to avoid tessellation for FMetalRHICommandContext::RHIEndDrawIndexedPrimitiveUP anymore - that was from back when the tessellation logic was replicated in each RHI*Draw* implementation.
#jira UE-51937
Change 3762181 by Joe.Graf
Changed MaxShaderJobBatchSize to 25 on Mac as it reduced shader compile time by 21%
Change 3762607 by Mark.Satterthwaite
Remove accidentally included changes from 3761995.
Change 3762612 by Mark.Satterthwaite
Enable the explicit sincos intrinsic for Metal to avoid instances of UE-52477 that can cause shaders to compile incorrectly through hlslcc.
#jira UE-52477
Change 3762772 by Michael.Lentine
Move RHI calls to render thread.
Change 3763021 by Richard.Wallis
Remove shader cache tool project and implementation.
#jira UE-51613
Change 3763082 by Guillaume.Abadie
More SceneTexture, SceneColor and SceneDepth automated tests
Change 3763111 by Richard.Wallis
Clone of CL 3763033 (Release-4.18):
Fix for crash upon launching packaged game on Mac with Share Material Shader Code enabled.
#jira UE-52121
Change 3763657 by Michael.Lentine
Invalidate ddc for skeletal mesh render data so that the duplicated vertex render structures are properly serialized.
Change 3763727 by Jian.Ru
Fix Player Collision view mode. It is caused by checking an uninitialized vertex buffer so the check always fail.
#jira UE-52052
Change 3763738 by Guillaume.Abadie
Implements SSR input post process material location.
Change 3764271 by Mark.Satterthwaite
Allow ControlPointPatch lists to flow through MetalRHI as it was setup to handle this transparently - the VSHS compute shader will convert them to triangles to draw. Report the same warning as in the pipeline creation stage as this hasn't been formally validated.
#jira UE-52454
Change 3764316 by Daniel.Wright
Added AVolumetricLightmapDensityVolume - gives local control over Volumetric Lightmap density. Dropping the top mip outside of the play area in Monolith saves 20Mb (35Mb original).
Volumetric Lightmap no longer refines around static translucent geometry - saves 5Mb in Monolith
Reworked brick culling by error mechanism. Now compares error to interpolated parent lighting instead of the brick average - prevents dropping constant value bricks which are near a wall and cause leaking due to parent interpolation after being culled.
Change 3764318 by Daniel.Wright
Missing file
Change 3764321 by Daniel.Wright
Shader compiling memory optimizations
* Editor memory: Sharing uniform buffer includes and GeneratedInstancedStereo.ush per FShaderType (was previously duplicated per FShader job)
* SCW input size: Sharing uniform buffer includes and SharedEnvironment per batch
* 7.6Gb of shader job inputs in memory -> .5Gb (13x less) when doing a full shader compile of Paragon Editor
* 13.8Gb written into worker input files -> 2.9Gb (4.7x less). Global shaders are never batched when sent to SCW so unoptimized by these changes.
Change 3764595 by Daniel.Wright
Added VolumetricLightmapDensityVolume asset icons
Change 3764701 by Michael.Lentine
Add duplicated vertices merging for meshmerge.
Change 3766002 by Guillaume.Abadie
Fixes a crash in translucency.
Change 3766007 by Guillaume.Abadie
Oups.... Fixes compilation failure.
Change 3766697 by Guillaume.Abadie
Giant refactor of global shader interface for upcoming native support of permutation.
CL generated by python script.
Change 3767205 by Chris.Bunner
Deferring FMaterial::RenderingThreadShaderMap update to render-thread rather than assumption commands have been flushed.
#jira UE-50652
Change 3767207 by Chris.Bunner
Clamp fetched texture coordinates to those available on the mesh.
Change 3767209 by Chris.Bunner
PR #4203: Early-outs in UMaterialInstance parameter setters (Contributed by stefanzimecki)
#jira UE-52193
Change 3767772 by Mark.Satterthwaite
MetalShaderFormat will no longer fallback to text shaders when you ask it to compile to bytecode but the bytecode compiler is not available (either locally or remotely) - this ensures that the DDC can't be poisoned by incorrectly configured clients. The Editor is already setup such that if the remote shader compiler is not configured & Xcode is not available locally the shader-compiler will be invoked to generate text shaders.
#jira UE-52554
Change 3768604 by Guillaume.Abadie
Polish up with new global shader function signature.
Change 3768993 by Guillaume.Abadie
Fixes r.Upscale.Panini cvars
Change 3769478 by Mark.Satterthwaite
Move the ue4_stdlib.metal & PCH into a temporary directory that exists for the lifetime of the SCW on the remote side as well as the local one and add this path as an include directory.
#jira UE-52587
Change 3769703 by Mark.Satterthwaite
For all Metal platforms >= Metal v1.2 transform mul(a,b) into fma(a,b,0) to prevent the Apple compiler reordering operations differently between the base & depth passes which results in variance in the position output.
For iOS disable fast-math when the vertex-shader uses World-Position-Offset because there are additional problems on the iOS shader compiler that result in position variance even with the above fix - WPO performance will suffer but I don't have any alternatives.
Remove the depth-offset hack from the depth-only vertex shader again.
#jira UES-5651
Change 3769763 by Mark.Satterthwaite
Handle swizzle's in the hlslcc fma identification pass so that we reduce the number of instructions and the platform compiler can't break the instructions up.
Change 3769849 by Mark.Satterthwaite
Fix CIS error.
Change 3770517 by Richard.Wallis
Fix for crash when creating a new media texture (AppleIntelHD5000GraphicsMTLDriver!SamplerStage::bindSamplerToTexture()). Missing texture resource for binding. Old InitDynamicRHI() code has been refactored out into seperate functions which leaves us on Mac with a NULL resource initially after creation which Metal doesn't like. This fix puts InitDynamicRHI down the default setup/clear path which inits default resources - I don't think we should use a global dummy in this instance as this is a render target.
#jira UE-51940
Change 3770688 by Uriel.Doyon
Fixed texture resolution returning 0 when running blueprint construction scripts at cook time.
Change 3771115 by Mark.Satterthwaite
Report errors from failed attempts to compile global shaders or we can't see why things fail on non-Windows platforms.
Change 3771263 by Mark.Satterthwaite
Change the way ManualVertexFetch is enabled on Metal platforms so that it is enabled when targeting Metal v1.2 and higher (macOS 10.12+/iOS 10+). This brings iOS in the Desktop Forward renderer back into line with the Mac.
#jira UERNDR-300
Change 3773472 by Guillaume.Abadie
Fixes a crash on PIE of SimpleComposure project.
Change 3773475 by Guillaume.Abadie
Fixes bug in editor viewport caused by SSR input changes.
Change 3774677 by Arne.Schober
DR - Deprecated SetLocal from the RHICmdlist
Fixed some unnecessary PSO collisions.
Change 3777037 by Mark.Satterthwaite
Remove incorrect change that caused a reference to "accurate::sincos" to appear in some Metal shaders rather than "precise::sincos".
Change 3777122 by Mark.Satterthwaite
Back out changelist 3777037 - I'm blind and wasn't seeing the real problem was a stale shader cache...
Change 3777196 by Mark.Satterthwaite
Fix text-shader compilation on iOS 10 - maybe iOS 9 too (untested!).
We need our own make_scalar type-trait template for ue4_stdlib.metal so that we still compile with older iOS runtime compilers and we can't use as_type to directly implement the packHalf2x16/unpackHalf2x16 intrinsics for these older runtime compilers either.
Change 3779098 by Rolando.Caloca
DR - vk - Fix query index
Change 3779275 by Mark.Satterthwaite
Silence the Metal runtime compiler warning caused by use of a deprecated enum value when running text shaders compiled for Metal v1.0/1.1 on a Metal v1.2+ OS.
#jira UE-52554
Change 3779427 by Rolando.Caloca
DR - vk - Fix for allocator contention
Change 3779608 by Uriel.Doyon
Fixed invalid access in the resave package commantlet when building texture streaming material data for materials enabling tesselation.
Change 3784496 by Mark.Satterthwaite
Temporarily disable USE_OBJECT_COMPOSITING_TILE_CULLING for Metal shader compilation only - other platforms are unaffected - as it isn't working properly for some reason. need to work out what's up but don't want Distance Fields to be completely snookered in the interim.
#jira UE-52952
Change 3784608 by Rolando.Caloca
DR - Copy 3784588
- Fix for drivers returning out of date swapchains during resizes
Change 3784734 by Mark.Satterthwaite
Real fix for UE-52952 - MetalShaderFormat wasn't propagating the full thread-group value.
#jira UE-52952
Change 3784741 by Mark.Satterthwaite
More Metal debugging commandline options "-metalfastmath" & "-metalnofastmath" to force fast-math on or off for all shaders, must be using runtime-compiled shaders (i.e. -metalshaderdebug or r.Shaders.Optimise=0) to take effect.
Change 3787103 by Guillaume.Abadie
Kills BuiltinSamplers UB
Change 3787207 by Guillaume.Abadie
Sorry, compile fix that were fine with local changes...
Change 3787396 by Marcus.Wassmer
PR #4271: UE-52901: Set VIS_Max meta to hidden (Contributed by projectgheist)
Change 3788028 by Peter.Sumanaseni
Working linear HDR exr output from sequencer
Change 3788536 by Mark.Satterthwaite
Track whether the Metal shader uses the discard_fragment function as when this is used but without any other outputs we know we need to bind at least one render-target or a depth-stencil surface but we don't know which. This lets us correctly error when we encounter a shader with no outputs at all which Metal doesn't permit.
#jira UE-52292
Change 3788538 by Mark.Satterthwaite
Let's try mitigating UE-46604 on Nvidia by retaining resource references in the command-buffer. This shouldn't be necessary and isn't typically on other vendors but we haven't been able to reproduce this reliably enough to get to the bottom of it.
#jira UE-46604
Change 3789083 by Guillaume.Abadie
Implements global shader permutations. Example in ScreenSpaceReflections.cpp.
Change 3789090 by Guillaume.Abadie
Fixes linux build.
Change 3789106 by Guillaume.Abadie
Fixes compilation failure in niagara plugin.
Change 3789274 by Guillaume.Abadie
Avoid hit proxies to clobber TAA's hitsory.
#jira UE-52968
Change 3789380 by Guillaume.Abadie
Back out changelist 3789083: global shader permutation because compilation failure in clang.
Change 3789648 by Guillaume.Abadie
Relands global shader permutation, with clang support.
Change 3789712 by Guillaume.Abadie
Fixes TestImage show flag with TAAU on.
#jira UE-53061
Change 3791593 by Guillaume.Abadie
Reinvalidates shaders with shader permutations.
Change 3791884 by Daniel.Wright
Added BP setter for LowerHemisphereColor
Change 3791886 by Daniel.Wright
Added LightmapType to PrimitiveComponent
* ForceVolumetric allows forcing static geometry to use Volumetric Lightmaps, which can be useful on instanced foliage where seams are prevalent. Lightmass internal caching still requires lightmap UVs and reasonable lightmap resolution.
* ForceSurface replaces bLightAsIfStatic
Improvements to Volumetric Lightmap quality needed for static geometry
* Stationary light shadowing is now dilated inside geometry
* Now doing two dilation passes since samples near geometry see inside due to ray start bias
* Refinement around geometry uses an expanded cell bounds when the geometry is going to use Volumetric Lightmaps, since cross-resolution stitching causes leaking
Lightmass debug primitives are now tied to a swarm task instead of global - allows debugging of Volumetric Lightmap tasks
Change 3792256 by Guillaume.Abadie
Fixes a bug where permutation was not actually serialised in FShader, so was ending up recompiling shader at every load.
Change 3792884 by Marcus.Wassmer
Copying //UE4/Partner-AMD to Dev-Rendering (//UE4/Dev-Rendering)
Change 3793200 by Marcus.Wassmer
Copying //UE4/Partner-IDV-SpeedTree to Dev-Rendering (//UE4/Dev-Rendering)
Speedtree 8 support
Change 3793206 by Brian.Karis
Added color grading control BlueCorrection to correct for artifacts with "electric" blues due to the ACEScg color space. Bright blue desaturates instead of going to violet.
Added color grading control ExpandGamut which expands bright saturated colors outside the sRGB gamut to fake wide gamut rendering.
ACES changes.
Change 3793344 by Marcus.Wassmer
Fix editortest compile
Change 3794285 by Guillaume.Abadie
Serializes PermutationId according to archive rendering version to avoid issues with old material that were serializing a shader map into UObject.
Change 3794307 by Guillaume.Abadie
Resaves uassets that were modified between 3789648 and 3794285
Change 3794627 by Mark.Satterthwaite
Implement two components for MTLPP, an IMP cache for Objective-C selector implementations & an interposition framework for those same selectors:
- imp_SelectorCache & friends provide the IMP caching for each of the Metal protocols which constitute most of the API, so far I've not covered the Metal classes used for the various descriptor/initializer types. Each type has its own IMPTable which caches the selector's implementation pointer and provides the mechanism to hook that implementation. As Objective-C is runtime dynamic this look up must be performed on the actual Class value returned by an object at runtime - you can't do this at compile time. Even things like NSString which appear compile-time static are really not as NSString is an alias for a class-cluster (NSString, NSMutableString, __NSInlineString and more).
- The interpose directory contains MTI* files which are the framework for interposing all the functions in Metal's runtime API - I deliberately omit the descriptor classes & read-only functions as there's no benefit to interposing them - which I can build off to create a trace tool or a superior validation layer. Right now this is Mac only as there'll be some problems to solve for iOS/tvOS due to difference in linking requirements - not insurmountable.
- Rebuild MTLPP's implementation of the C++ wrapper classes around the IMPTable's - this means we avoid all the objc_msgSend overhead for all the classes and functions whose implementations are cached. Right now the IMPTable is going to incur a look-up for all non-copy/move constructors which is suboptimal - ideally the Metal IMPTables would be cached in the Device object as they will be consistent within a single Device.
- Sort out the MTLPP availability logic - it now exports the availability warnings to the caller and internally just blithely assumes it may call the functions, the caller is responsible for ensuring that calls are made only on appropriate devices & OSes. This reduces MTLPP complexity and better fits how MetalRHI works.
- Fix a number of retain/release bugs that were lying dormant in MTLPP but exposed by the switch to IMPTables.
- Add tvOS support.
Next up, put this into MetalRHI and start fixing all the fallout.
Change 3794631 by Mark.Satterthwaite
Missed updating mtlpp's build.cs for TVOS.
Change 3794651 by Uriel.Doyon
UPointLightComponent::GetUnitsConversionFactor() now takes the cone angle as parameter. This allows to fix spotlight unit conversion when using lumens.
Change 3794720 by Guillaume.Abadie
Fixes a bug in Global{Bilinear,Trilinear}ClampedSampler that was actually doing a Point sampling.
Change 3794749 by Mark.Satterthwaite
Fix mtlpp.build.cs paths.
Change 3794856 by Mark.Satterthwaite
Fix some shadowing warnings.
Change 3795484 by Daniel.Wright
Implemented the Spherical Harmonic windowing algorithm from 'Stupid Spherical Harmonics (SH) Tricks'
New WorldSettings Lightmass property VolumetricLightmapSphericalHarmonicSmoothing controls the global amount of smoothing applied
Change 3795590 by Brian.Karis
Area light fixes
Fixed order of operations. This helps mixing of SourceRadius, SourceLength, and SoftSourceRadius.
Change 3796832 by Marcus.Wassmer
Correct shouldcache condition for new resolve shader
Change 3796884 by Marcus.Wassmer
Doing it right this time.
Change 3797196 by Mark.Satterthwaite
More updates to MTLPP to make things simpler and reduce the number of spurious Objective-C warnings that are emitted because of the way we are using the runtime.
Change 3797200 by Daniel.Wright
Lightmass now uses the highest density VolumetricLightmapDensityVolume settings that affect any part of a cell
Change 3797221 by Daniel.Wright
Reduced default SphericalHarmonicSmoothing based on RoboRecall tests. Now only active with strong direct lighting from static lights by default.
Change 3797411 by Brian.Karis
Disable ExpandGamut for old tone mapper.
Change 3797462 by Mark.Satterthwaite
More build warnings silenced after changing to the lowest possible deployment target OS for each library.
Change 3797585 by Mark.Satterthwaite
Range-based-For support in the NSArray wrapper.
Change 3797836 by Mark.Satterthwaite
Even more forward-declarations to avoid system headers poking through to the including code from mtlpp.
Change 3798027 by Mark.Satterthwaite
Fix handling of nil objects, on which no functions may be called, command-buffer retention and IMP declaration.
Change 3798154 by Mark.Satterthwaite
Fix some egregious memory leaks that rewriting to use mtlpp exposed before we carry on - don't want these slipping into 4.19.
Change 3800990 by Mark.Satterthwaite
Typedef all the completion-handler callback types in mtlpp to make future me's life easier.
Change 3801400 by Chris.Bunner
Improving automated test errors on failure to generate report data.
Change 3801726 by Mark.Satterthwaite
Correct some function availability and the command-buffer error status in mtlpp.
Change 3801808 by Chris.Bunner
Added DefaultScalability.ini to EngineTest that forces all quality levels to Engine default Epic for now to improve consistency.
Change 3801862 by Marcus.Wassmer
Update automated tests with color gamut change
Change 3802214 by Chris.Bunner
When running automated tests in and editor-locked PIE viewport, skip resizing as the editor can't handle this.
Added bindable delegate called when ScreenshotRequest is processed - Useful to allow screenshots to override and restore settings per capture.
#jira UE-53188
Change 3802243 by Chris.Bunner
Added button to automated test screenshot browser to add or replace all outstanding test reports if appropriate.
DeleteAllReports button is now only enabled whilst there are reports in the list.
Change 3802372 by Chris.Bunner
Updating more test screenshots.
Change 3803683 by Chris.Bunner
Adding more logging and multiple attempts to automated test report network save.
Added small wait on repeated operations that are known to fail.
Change 3803826 by Rolando.Caloca
DR - vk - Fix merge issue
Change 3804181 by Chris.Bunner
Tentative fix for CIS test failure.
Change 3804236 by Chris.Bunner
Additional logging for case where file write silently fails, report platform-specific error.
Change 3804303 by zachary.wilson
Cleaning up assets in QAGame saved with empty engine versions to resolve warnings seen when launching on
Change 3804410 by Chris.Bunner
Added additional logging when automated screenshot test fails due to size mismatch.
Mismatched bounds are colored red in the delta.
Change 3804455 by Mark.Satterthwaite
Fix a small number of persistent memory leaks on the Mac build that slowly consume more and more memory as you use the Editor - interacting with menu's was particularly egregious as each NSMenu would leak after you move away.
#jira NA
Change 3804667 by Chris.Bunner
Speculative CIS fixes.
Change 3806008 by Chris.Bunner
Partially reimplementing backed-out CL 3804181 to improve consistency of how automated screenshot test settings are applied/restored.
#tests CIS preflight job 8174412
Change 3806909 by Mark.Satterthwaite
Use the vertex-shader's in-out mask to ensure that we only validate legitmate vertex-streams in Metal's DrawIndexedPrimitive implementation.
#jira UE-53046
Change 3807059 by laz.matech
Checking in QAGame Rendering Map, QA-PhysicalLightingUnits, for testing Physical Light Units.
Wanted to get this in before copy up.
#Jira none
Change 3807726 by Chris.Bunner
Removed a check that we can't fix up. The check hits unbound buffers which it assumes means a failure but is actually due to m.v.fetch. We don't have the information available to know which are which removed from the input without reading from the shader.
#jira UE-53046
Change 3807800 by Guillaume.Abadie
Fixes some warning in shader headers.
Change 3807804 by Guillaume.Abadie
Back out changelist 3807800
Change 3807807 by Guillaume.Abadie
Relands shader header warnings.
Change 3808046 by Chris.Bunner
Dropping a new automated test error back to a warning as this may lead to genuine issues being ignored in the short term.
Change 3809579 by Chris.Bunner
Back out changelist 3774677.
#jira UE-53483
Change 3809620 by Chris.Bunner
Updating animated cloth test screenshot.
Change 3803629 by Chris.Bunner
Rebuilt CornellBox and DistanceField test maps, updated screenshots.
Change 3787045 by Guillaume.Abadie
Moves some global samplers to Common.ush
Change 3809756 by Chris.Bunner
Updating animated cloth test screenshot.
[CL 3809764 by Chris Bunner in Main branch]
2017-12-15 12:47:47 -05:00
static void ModifyCompilationEnvironment ( const FGlobalShaderPermutationParameters & Parameters , FShaderCompilerEnvironment & OutEnvironment )
2015-12-10 21:55:37 -05:00
{
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3809756)
#rb None
#lockdown Nick.Penwarden
============================
MAJOR FEATURES & CHANGES
============================
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3761370 by Arne.Schober
DR - Added CityHash to use with conatiners and stuff. It provides good performance and high quallity across multiple platforms.
Change 3761437 by Guillaume.Abadie
Optimises motion blur compute shader for consoles.
Change 3761483 by Guillaume.Abadie
Fixes D3D11 RHI lying to dynamic resolution heuristic with t.MaxFPS.
Change 3761995 by Mark.Satterthwaite
Add the Metal compiler path to the local .pch filename to avoid problems when Xcode moves.
Change 3761996 by Mark.Satterthwaite
Emit more details when a pixel shader is found to have no outputs at all which Metal doesn't permit. More likely this is a bug in the shader compiler not configuring the in-out mask correctly...
#jira UE-52292
Change 3761999 by Mark.Satterthwaite
No need to avoid tessellation for FMetalRHICommandContext::RHIEndDrawIndexedPrimitiveUP anymore - that was from back when the tessellation logic was replicated in each RHI*Draw* implementation.
#jira UE-51937
Change 3762181 by Joe.Graf
Changed MaxShaderJobBatchSize to 25 on Mac as it reduced shader compile time by 21%
Change 3762607 by Mark.Satterthwaite
Remove accidentally included changes from 3761995.
Change 3762612 by Mark.Satterthwaite
Enable the explicit sincos intrinsic for Metal to avoid instances of UE-52477 that can cause shaders to compile incorrectly through hlslcc.
#jira UE-52477
Change 3762772 by Michael.Lentine
Move RHI calls to render thread.
Change 3763021 by Richard.Wallis
Remove shader cache tool project and implementation.
#jira UE-51613
Change 3763082 by Guillaume.Abadie
More SceneTexture, SceneColor and SceneDepth automated tests
Change 3763111 by Richard.Wallis
Clone of CL 3763033 (Release-4.18):
Fix for crash upon launching packaged game on Mac with Share Material Shader Code enabled.
#jira UE-52121
Change 3763657 by Michael.Lentine
Invalidate ddc for skeletal mesh render data so that the duplicated vertex render structures are properly serialized.
Change 3763727 by Jian.Ru
Fix Player Collision view mode. It is caused by checking an uninitialized vertex buffer so the check always fail.
#jira UE-52052
Change 3763738 by Guillaume.Abadie
Implements SSR input post process material location.
Change 3764271 by Mark.Satterthwaite
Allow ControlPointPatch lists to flow through MetalRHI as it was setup to handle this transparently - the VSHS compute shader will convert them to triangles to draw. Report the same warning as in the pipeline creation stage as this hasn't been formally validated.
#jira UE-52454
Change 3764316 by Daniel.Wright
Added AVolumetricLightmapDensityVolume - gives local control over Volumetric Lightmap density. Dropping the top mip outside of the play area in Monolith saves 20Mb (35Mb original).
Volumetric Lightmap no longer refines around static translucent geometry - saves 5Mb in Monolith
Reworked brick culling by error mechanism. Now compares error to interpolated parent lighting instead of the brick average - prevents dropping constant value bricks which are near a wall and cause leaking due to parent interpolation after being culled.
Change 3764318 by Daniel.Wright
Missing file
Change 3764321 by Daniel.Wright
Shader compiling memory optimizations
* Editor memory: Sharing uniform buffer includes and GeneratedInstancedStereo.ush per FShaderType (was previously duplicated per FShader job)
* SCW input size: Sharing uniform buffer includes and SharedEnvironment per batch
* 7.6Gb of shader job inputs in memory -> .5Gb (13x less) when doing a full shader compile of Paragon Editor
* 13.8Gb written into worker input files -> 2.9Gb (4.7x less). Global shaders are never batched when sent to SCW so unoptimized by these changes.
Change 3764595 by Daniel.Wright
Added VolumetricLightmapDensityVolume asset icons
Change 3764701 by Michael.Lentine
Add duplicated vertices merging for meshmerge.
Change 3766002 by Guillaume.Abadie
Fixes a crash in translucency.
Change 3766007 by Guillaume.Abadie
Oups.... Fixes compilation failure.
Change 3766697 by Guillaume.Abadie
Giant refactor of global shader interface for upcoming native support of permutation.
CL generated by python script.
Change 3767205 by Chris.Bunner
Deferring FMaterial::RenderingThreadShaderMap update to render-thread rather than assumption commands have been flushed.
#jira UE-50652
Change 3767207 by Chris.Bunner
Clamp fetched texture coordinates to those available on the mesh.
Change 3767209 by Chris.Bunner
PR #4203: Early-outs in UMaterialInstance parameter setters (Contributed by stefanzimecki)
#jira UE-52193
Change 3767772 by Mark.Satterthwaite
MetalShaderFormat will no longer fallback to text shaders when you ask it to compile to bytecode but the bytecode compiler is not available (either locally or remotely) - this ensures that the DDC can't be poisoned by incorrectly configured clients. The Editor is already setup such that if the remote shader compiler is not configured & Xcode is not available locally the shader-compiler will be invoked to generate text shaders.
#jira UE-52554
Change 3768604 by Guillaume.Abadie
Polish up with new global shader function signature.
Change 3768993 by Guillaume.Abadie
Fixes r.Upscale.Panini cvars
Change 3769478 by Mark.Satterthwaite
Move the ue4_stdlib.metal & PCH into a temporary directory that exists for the lifetime of the SCW on the remote side as well as the local one and add this path as an include directory.
#jira UE-52587
Change 3769703 by Mark.Satterthwaite
For all Metal platforms >= Metal v1.2 transform mul(a,b) into fma(a,b,0) to prevent the Apple compiler reordering operations differently between the base & depth passes which results in variance in the position output.
For iOS disable fast-math when the vertex-shader uses World-Position-Offset because there are additional problems on the iOS shader compiler that result in position variance even with the above fix - WPO performance will suffer but I don't have any alternatives.
Remove the depth-offset hack from the depth-only vertex shader again.
#jira UES-5651
Change 3769763 by Mark.Satterthwaite
Handle swizzle's in the hlslcc fma identification pass so that we reduce the number of instructions and the platform compiler can't break the instructions up.
Change 3769849 by Mark.Satterthwaite
Fix CIS error.
Change 3770517 by Richard.Wallis
Fix for crash when creating a new media texture (AppleIntelHD5000GraphicsMTLDriver!SamplerStage::bindSamplerToTexture()). Missing texture resource for binding. Old InitDynamicRHI() code has been refactored out into seperate functions which leaves us on Mac with a NULL resource initially after creation which Metal doesn't like. This fix puts InitDynamicRHI down the default setup/clear path which inits default resources - I don't think we should use a global dummy in this instance as this is a render target.
#jira UE-51940
Change 3770688 by Uriel.Doyon
Fixed texture resolution returning 0 when running blueprint construction scripts at cook time.
Change 3771115 by Mark.Satterthwaite
Report errors from failed attempts to compile global shaders or we can't see why things fail on non-Windows platforms.
Change 3771263 by Mark.Satterthwaite
Change the way ManualVertexFetch is enabled on Metal platforms so that it is enabled when targeting Metal v1.2 and higher (macOS 10.12+/iOS 10+). This brings iOS in the Desktop Forward renderer back into line with the Mac.
#jira UERNDR-300
Change 3773472 by Guillaume.Abadie
Fixes a crash on PIE of SimpleComposure project.
Change 3773475 by Guillaume.Abadie
Fixes bug in editor viewport caused by SSR input changes.
Change 3774677 by Arne.Schober
DR - Deprecated SetLocal from the RHICmdlist
Fixed some unnecessary PSO collisions.
Change 3777037 by Mark.Satterthwaite
Remove incorrect change that caused a reference to "accurate::sincos" to appear in some Metal shaders rather than "precise::sincos".
Change 3777122 by Mark.Satterthwaite
Back out changelist 3777037 - I'm blind and wasn't seeing the real problem was a stale shader cache...
Change 3777196 by Mark.Satterthwaite
Fix text-shader compilation on iOS 10 - maybe iOS 9 too (untested!).
We need our own make_scalar type-trait template for ue4_stdlib.metal so that we still compile with older iOS runtime compilers and we can't use as_type to directly implement the packHalf2x16/unpackHalf2x16 intrinsics for these older runtime compilers either.
Change 3779098 by Rolando.Caloca
DR - vk - Fix query index
Change 3779275 by Mark.Satterthwaite
Silence the Metal runtime compiler warning caused by use of a deprecated enum value when running text shaders compiled for Metal v1.0/1.1 on a Metal v1.2+ OS.
#jira UE-52554
Change 3779427 by Rolando.Caloca
DR - vk - Fix for allocator contention
Change 3779608 by Uriel.Doyon
Fixed invalid access in the resave package commantlet when building texture streaming material data for materials enabling tesselation.
Change 3784496 by Mark.Satterthwaite
Temporarily disable USE_OBJECT_COMPOSITING_TILE_CULLING for Metal shader compilation only - other platforms are unaffected - as it isn't working properly for some reason. need to work out what's up but don't want Distance Fields to be completely snookered in the interim.
#jira UE-52952
Change 3784608 by Rolando.Caloca
DR - Copy 3784588
- Fix for drivers returning out of date swapchains during resizes
Change 3784734 by Mark.Satterthwaite
Real fix for UE-52952 - MetalShaderFormat wasn't propagating the full thread-group value.
#jira UE-52952
Change 3784741 by Mark.Satterthwaite
More Metal debugging commandline options "-metalfastmath" & "-metalnofastmath" to force fast-math on or off for all shaders, must be using runtime-compiled shaders (i.e. -metalshaderdebug or r.Shaders.Optimise=0) to take effect.
Change 3787103 by Guillaume.Abadie
Kills BuiltinSamplers UB
Change 3787207 by Guillaume.Abadie
Sorry, compile fix that were fine with local changes...
Change 3787396 by Marcus.Wassmer
PR #4271: UE-52901: Set VIS_Max meta to hidden (Contributed by projectgheist)
Change 3788028 by Peter.Sumanaseni
Working linear HDR exr output from sequencer
Change 3788536 by Mark.Satterthwaite
Track whether the Metal shader uses the discard_fragment function as when this is used but without any other outputs we know we need to bind at least one render-target or a depth-stencil surface but we don't know which. This lets us correctly error when we encounter a shader with no outputs at all which Metal doesn't permit.
#jira UE-52292
Change 3788538 by Mark.Satterthwaite
Let's try mitigating UE-46604 on Nvidia by retaining resource references in the command-buffer. This shouldn't be necessary and isn't typically on other vendors but we haven't been able to reproduce this reliably enough to get to the bottom of it.
#jira UE-46604
Change 3789083 by Guillaume.Abadie
Implements global shader permutations. Example in ScreenSpaceReflections.cpp.
Change 3789090 by Guillaume.Abadie
Fixes linux build.
Change 3789106 by Guillaume.Abadie
Fixes compilation failure in niagara plugin.
Change 3789274 by Guillaume.Abadie
Avoid hit proxies to clobber TAA's hitsory.
#jira UE-52968
Change 3789380 by Guillaume.Abadie
Back out changelist 3789083: global shader permutation because compilation failure in clang.
Change 3789648 by Guillaume.Abadie
Relands global shader permutation, with clang support.
Change 3789712 by Guillaume.Abadie
Fixes TestImage show flag with TAAU on.
#jira UE-53061
Change 3791593 by Guillaume.Abadie
Reinvalidates shaders with shader permutations.
Change 3791884 by Daniel.Wright
Added BP setter for LowerHemisphereColor
Change 3791886 by Daniel.Wright
Added LightmapType to PrimitiveComponent
* ForceVolumetric allows forcing static geometry to use Volumetric Lightmaps, which can be useful on instanced foliage where seams are prevalent. Lightmass internal caching still requires lightmap UVs and reasonable lightmap resolution.
* ForceSurface replaces bLightAsIfStatic
Improvements to Volumetric Lightmap quality needed for static geometry
* Stationary light shadowing is now dilated inside geometry
* Now doing two dilation passes since samples near geometry see inside due to ray start bias
* Refinement around geometry uses an expanded cell bounds when the geometry is going to use Volumetric Lightmaps, since cross-resolution stitching causes leaking
Lightmass debug primitives are now tied to a swarm task instead of global - allows debugging of Volumetric Lightmap tasks
Change 3792256 by Guillaume.Abadie
Fixes a bug where permutation was not actually serialised in FShader, so was ending up recompiling shader at every load.
Change 3792884 by Marcus.Wassmer
Copying //UE4/Partner-AMD to Dev-Rendering (//UE4/Dev-Rendering)
Change 3793200 by Marcus.Wassmer
Copying //UE4/Partner-IDV-SpeedTree to Dev-Rendering (//UE4/Dev-Rendering)
Speedtree 8 support
Change 3793206 by Brian.Karis
Added color grading control BlueCorrection to correct for artifacts with "electric" blues due to the ACEScg color space. Bright blue desaturates instead of going to violet.
Added color grading control ExpandGamut which expands bright saturated colors outside the sRGB gamut to fake wide gamut rendering.
ACES changes.
Change 3793344 by Marcus.Wassmer
Fix editortest compile
Change 3794285 by Guillaume.Abadie
Serializes PermutationId according to archive rendering version to avoid issues with old material that were serializing a shader map into UObject.
Change 3794307 by Guillaume.Abadie
Resaves uassets that were modified between 3789648 and 3794285
Change 3794627 by Mark.Satterthwaite
Implement two components for MTLPP, an IMP cache for Objective-C selector implementations & an interposition framework for those same selectors:
- imp_SelectorCache & friends provide the IMP caching for each of the Metal protocols which constitute most of the API, so far I've not covered the Metal classes used for the various descriptor/initializer types. Each type has its own IMPTable which caches the selector's implementation pointer and provides the mechanism to hook that implementation. As Objective-C is runtime dynamic this look up must be performed on the actual Class value returned by an object at runtime - you can't do this at compile time. Even things like NSString which appear compile-time static are really not as NSString is an alias for a class-cluster (NSString, NSMutableString, __NSInlineString and more).
- The interpose directory contains MTI* files which are the framework for interposing all the functions in Metal's runtime API - I deliberately omit the descriptor classes & read-only functions as there's no benefit to interposing them - which I can build off to create a trace tool or a superior validation layer. Right now this is Mac only as there'll be some problems to solve for iOS/tvOS due to difference in linking requirements - not insurmountable.
- Rebuild MTLPP's implementation of the C++ wrapper classes around the IMPTable's - this means we avoid all the objc_msgSend overhead for all the classes and functions whose implementations are cached. Right now the IMPTable is going to incur a look-up for all non-copy/move constructors which is suboptimal - ideally the Metal IMPTables would be cached in the Device object as they will be consistent within a single Device.
- Sort out the MTLPP availability logic - it now exports the availability warnings to the caller and internally just blithely assumes it may call the functions, the caller is responsible for ensuring that calls are made only on appropriate devices & OSes. This reduces MTLPP complexity and better fits how MetalRHI works.
- Fix a number of retain/release bugs that were lying dormant in MTLPP but exposed by the switch to IMPTables.
- Add tvOS support.
Next up, put this into MetalRHI and start fixing all the fallout.
Change 3794631 by Mark.Satterthwaite
Missed updating mtlpp's build.cs for TVOS.
Change 3794651 by Uriel.Doyon
UPointLightComponent::GetUnitsConversionFactor() now takes the cone angle as parameter. This allows to fix spotlight unit conversion when using lumens.
Change 3794720 by Guillaume.Abadie
Fixes a bug in Global{Bilinear,Trilinear}ClampedSampler that was actually doing a Point sampling.
Change 3794749 by Mark.Satterthwaite
Fix mtlpp.build.cs paths.
Change 3794856 by Mark.Satterthwaite
Fix some shadowing warnings.
Change 3795484 by Daniel.Wright
Implemented the Spherical Harmonic windowing algorithm from 'Stupid Spherical Harmonics (SH) Tricks'
New WorldSettings Lightmass property VolumetricLightmapSphericalHarmonicSmoothing controls the global amount of smoothing applied
Change 3795590 by Brian.Karis
Area light fixes
Fixed order of operations. This helps mixing of SourceRadius, SourceLength, and SoftSourceRadius.
Change 3796832 by Marcus.Wassmer
Correct shouldcache condition for new resolve shader
Change 3796884 by Marcus.Wassmer
Doing it right this time.
Change 3797196 by Mark.Satterthwaite
More updates to MTLPP to make things simpler and reduce the number of spurious Objective-C warnings that are emitted because of the way we are using the runtime.
Change 3797200 by Daniel.Wright
Lightmass now uses the highest density VolumetricLightmapDensityVolume settings that affect any part of a cell
Change 3797221 by Daniel.Wright
Reduced default SphericalHarmonicSmoothing based on RoboRecall tests. Now only active with strong direct lighting from static lights by default.
Change 3797411 by Brian.Karis
Disable ExpandGamut for old tone mapper.
Change 3797462 by Mark.Satterthwaite
More build warnings silenced after changing to the lowest possible deployment target OS for each library.
Change 3797585 by Mark.Satterthwaite
Range-based-For support in the NSArray wrapper.
Change 3797836 by Mark.Satterthwaite
Even more forward-declarations to avoid system headers poking through to the including code from mtlpp.
Change 3798027 by Mark.Satterthwaite
Fix handling of nil objects, on which no functions may be called, command-buffer retention and IMP declaration.
Change 3798154 by Mark.Satterthwaite
Fix some egregious memory leaks that rewriting to use mtlpp exposed before we carry on - don't want these slipping into 4.19.
Change 3800990 by Mark.Satterthwaite
Typedef all the completion-handler callback types in mtlpp to make future me's life easier.
Change 3801400 by Chris.Bunner
Improving automated test errors on failure to generate report data.
Change 3801726 by Mark.Satterthwaite
Correct some function availability and the command-buffer error status in mtlpp.
Change 3801808 by Chris.Bunner
Added DefaultScalability.ini to EngineTest that forces all quality levels to Engine default Epic for now to improve consistency.
Change 3801862 by Marcus.Wassmer
Update automated tests with color gamut change
Change 3802214 by Chris.Bunner
When running automated tests in and editor-locked PIE viewport, skip resizing as the editor can't handle this.
Added bindable delegate called when ScreenshotRequest is processed - Useful to allow screenshots to override and restore settings per capture.
#jira UE-53188
Change 3802243 by Chris.Bunner
Added button to automated test screenshot browser to add or replace all outstanding test reports if appropriate.
DeleteAllReports button is now only enabled whilst there are reports in the list.
Change 3802372 by Chris.Bunner
Updating more test screenshots.
Change 3803683 by Chris.Bunner
Adding more logging and multiple attempts to automated test report network save.
Added small wait on repeated operations that are known to fail.
Change 3803826 by Rolando.Caloca
DR - vk - Fix merge issue
Change 3804181 by Chris.Bunner
Tentative fix for CIS test failure.
Change 3804236 by Chris.Bunner
Additional logging for case where file write silently fails, report platform-specific error.
Change 3804303 by zachary.wilson
Cleaning up assets in QAGame saved with empty engine versions to resolve warnings seen when launching on
Change 3804410 by Chris.Bunner
Added additional logging when automated screenshot test fails due to size mismatch.
Mismatched bounds are colored red in the delta.
Change 3804455 by Mark.Satterthwaite
Fix a small number of persistent memory leaks on the Mac build that slowly consume more and more memory as you use the Editor - interacting with menu's was particularly egregious as each NSMenu would leak after you move away.
#jira NA
Change 3804667 by Chris.Bunner
Speculative CIS fixes.
Change 3806008 by Chris.Bunner
Partially reimplementing backed-out CL 3804181 to improve consistency of how automated screenshot test settings are applied/restored.
#tests CIS preflight job 8174412
Change 3806909 by Mark.Satterthwaite
Use the vertex-shader's in-out mask to ensure that we only validate legitmate vertex-streams in Metal's DrawIndexedPrimitive implementation.
#jira UE-53046
Change 3807059 by laz.matech
Checking in QAGame Rendering Map, QA-PhysicalLightingUnits, for testing Physical Light Units.
Wanted to get this in before copy up.
#Jira none
Change 3807726 by Chris.Bunner
Removed a check that we can't fix up. The check hits unbound buffers which it assumes means a failure but is actually due to m.v.fetch. We don't have the information available to know which are which removed from the input without reading from the shader.
#jira UE-53046
Change 3807800 by Guillaume.Abadie
Fixes some warning in shader headers.
Change 3807804 by Guillaume.Abadie
Back out changelist 3807800
Change 3807807 by Guillaume.Abadie
Relands shader header warnings.
Change 3808046 by Chris.Bunner
Dropping a new automated test error back to a warning as this may lead to genuine issues being ignored in the short term.
Change 3809579 by Chris.Bunner
Back out changelist 3774677.
#jira UE-53483
Change 3809620 by Chris.Bunner
Updating animated cloth test screenshot.
Change 3803629 by Chris.Bunner
Rebuilt CornellBox and DistanceField test maps, updated screenshots.
Change 3787045 by Guillaume.Abadie
Moves some global samplers to Common.ush
Change 3809756 by Chris.Bunner
Updating animated cloth test screenshot.
[CL 3809764 by Chris Bunner in Main branch]
2017-12-15 12:47:47 -05:00
FGlobalShader : : ModifyCompilationEnvironment ( Parameters , OutEnvironment ) ;
2019-08-14 17:43:15 -04:00
OutEnvironment . SetRenderTargetOutputFormat ( 0 , OutputFormat ) ;
2015-12-10 21:55:37 -05:00
}
2019-04-29 11:59:36 -04:00
static bool ShouldCompilePermutation ( const FGlobalShaderPermutationParameters & Parameters )
{
2021-08-03 11:56:47 -04:00
return IsFeatureLevelSupported ( Parameters . Platform , ERHIFeatureLevel : : Type ( GetBasicEyeAdaptationMinFeatureLevel ( ) ) ) ;
2019-04-29 11:59:36 -04:00
}
2019-08-14 17:43:15 -04:00
FBasicEyeAdaptationShader ( ) = default ;
FBasicEyeAdaptationShader ( const CompiledShaderInitializerType & Initializer )
: FGlobalShader ( Initializer )
2019-04-29 11:59:36 -04:00
{ }
} ;
2019-08-14 17:43:15 -04:00
class FBasicEyeAdaptationPS : public FBasicEyeAdaptationShader
2019-04-29 11:59:36 -04:00
{
2019-08-14 17:43:15 -04:00
using Super = FBasicEyeAdaptationShader ;
2019-04-29 11:59:36 -04:00
public :
2019-08-14 17:43:15 -04:00
DECLARE_GLOBAL_SHADER ( FBasicEyeAdaptationPS ) ;
SHADER_USE_PARAMETER_STRUCT ( FBasicEyeAdaptationPS , Super ) ;
2019-04-29 11:59:36 -04:00
2019-08-14 17:43:15 -04:00
BEGIN_SHADER_PARAMETER_STRUCT ( FParameters , )
SHADER_PARAMETER_STRUCT_INCLUDE ( Super : : FParameters , Base )
RENDER_TARGET_BINDING_SLOTS ( )
2020-09-24 00:43:27 -04:00
END_SHADER_PARAMETER_STRUCT ( )
2019-08-14 17:43:15 -04:00
} ;
2019-04-29 11:59:36 -04:00
2019-08-14 17:43:15 -04:00
IMPLEMENT_GLOBAL_SHADER ( FBasicEyeAdaptationPS , " /Engine/Private/PostProcessEyeAdaptation.usf " , " BasicEyeAdaptationPS " , SF_Pixel ) ;
class FBasicEyeAdaptationCS : public FBasicEyeAdaptationShader
{
using Super = FBasicEyeAdaptationShader ;
public :
DECLARE_GLOBAL_SHADER ( FBasicEyeAdaptationCS ) ;
SHADER_USE_PARAMETER_STRUCT ( FBasicEyeAdaptationCS , Super ) ;
BEGIN_SHADER_PARAMETER_STRUCT ( FParameters , )
SHADER_PARAMETER_STRUCT_INCLUDE ( Super : : FParameters , Base )
SHADER_PARAMETER_RDG_TEXTURE_UAV ( RWTexture2D < float4 > , RWEyeAdaptationTexture )
2020-09-24 00:43:27 -04:00
END_SHADER_PARAMETER_STRUCT ( )
2019-04-29 11:59:36 -04:00
2020-09-24 00:43:27 -04:00
static bool ShouldCompilePermutation ( const FGlobalShaderPermutationParameters & Parameters )
2019-04-29 11:59:36 -04:00
{
return IsFeatureLevelSupported ( Parameters . Platform , ERHIFeatureLevel : : SM5 ) ;
}
} ;
2019-08-14 17:43:15 -04:00
IMPLEMENT_GLOBAL_SHADER ( FBasicEyeAdaptationCS , " /Engine/Private/PostProcessEyeAdaptation.usf " , " BasicEyeAdaptationCS " , SF_Compute ) ;
2015-12-10 21:55:37 -05:00
2019-08-14 17:43:15 -04:00
FRDGTextureRef AddBasicEyeAdaptationPass (
FRDGBuilder & GraphBuilder ,
2019-10-01 13:03:04 -04:00
const FViewInfo & View ,
2019-08-14 17:43:15 -04:00
const FEyeAdaptationParameters & EyeAdaptationParameters ,
2019-10-01 13:03:04 -04:00
FScreenPassTexture SceneColor ,
2019-08-14 17:43:15 -04:00
FRDGTextureRef EyeAdaptationTexture )
2015-12-10 21:55:37 -05:00
{
2021-11-18 14:37:34 -05:00
View . UpdateEyeAdaptationLastExposureFromTexture ( ) ;
View . SwapEyeAdaptationTextures ( ) ;
2015-12-10 21:55:37 -05:00
2019-10-01 13:03:04 -04:00
const FScreenPassTextureViewport SceneColorViewport ( SceneColor ) ;
2015-12-10 21:55:37 -05:00
2022-01-31 17:22:31 -05:00
FRDGTextureRef OutputTexture = GraphBuilder . RegisterExternalTexture ( View . GetEyeAdaptationTexture ( GraphBuilder . RHICmdList ) , ERDGTextureFlags : : MultiFrame ) ;
2015-12-10 21:55:37 -05:00
2019-08-14 17:43:15 -04:00
FBasicEyeAdaptationShader : : FParameters PassBaseParameters ;
2019-10-01 13:03:04 -04:00
PassBaseParameters . View = View . ViewUniformBuffer ;
2019-09-03 19:19:28 -04:00
PassBaseParameters . EyeAdaptation = EyeAdaptationParameters ;
2019-08-14 17:43:15 -04:00
PassBaseParameters . Color = GetScreenPassTextureViewportParameters ( SceneColorViewport ) ;
2019-10-01 13:03:04 -04:00
PassBaseParameters . ColorTexture = SceneColor . Texture ;
2019-08-14 17:43:15 -04:00
PassBaseParameters . EyeAdaptationTexture = EyeAdaptationTexture ;
2017-02-16 17:52:21 -05:00
2020-09-24 00:43:27 -04:00
if ( View . bUseComputePasses | | CVarEyeAdaptationBasicCompute . GetValueOnRenderThread ( ) )
2018-10-26 19:28:13 -04:00
{
2019-08-14 17:43:15 -04:00
FBasicEyeAdaptationCS : : FParameters * PassParameters = GraphBuilder . AllocParameters < FBasicEyeAdaptationCS : : FParameters > ( ) ;
PassParameters - > Base = PassBaseParameters ;
PassParameters - > RWEyeAdaptationTexture = GraphBuilder . CreateUAV ( OutputTexture ) ;
2015-12-10 21:55:37 -05:00
2019-10-01 13:03:04 -04:00
TShaderMapRef < FBasicEyeAdaptationCS > ComputeShader ( View . ShaderMap ) ;
2015-12-10 21:55:37 -05:00
2019-08-14 17:43:15 -04:00
FComputeShaderUtils : : AddPass (
GraphBuilder ,
RDG_EVENT_NAME ( " BasicEyeAdaptation (CS) " ) ,
2020-02-06 13:13:41 -05:00
ComputeShader ,
2019-08-14 17:43:15 -04:00
PassParameters ,
FIntVector ( 1 , 1 , 1 ) ) ;
2019-04-29 11:59:36 -04:00
}
else
{
2019-08-14 17:43:15 -04:00
FBasicEyeAdaptationPS : : FParameters * PassParameters = GraphBuilder . AllocParameters < FBasicEyeAdaptationPS : : FParameters > ( ) ;
PassParameters - > Base = PassBaseParameters ;
2019-08-15 18:58:08 -04:00
PassParameters - > RenderTargets [ 0 ] = FRenderTargetBinding ( OutputTexture , ERenderTargetLoadAction : : ENoAction ) ;
2019-04-29 11:59:36 -04:00
2019-10-01 13:03:04 -04:00
TShaderMapRef < FBasicEyeAdaptationPS > PixelShader ( View . ShaderMap ) ;
2019-04-29 11:59:36 -04:00
2019-08-14 17:43:15 -04:00
const FScreenPassTextureViewport OutputViewport ( OutputTexture ) ;
2019-04-29 11:59:36 -04:00
2019-08-14 17:43:15 -04:00
AddDrawScreenPass (
GraphBuilder ,
RDG_EVENT_NAME ( " BasicEyeAdaptation (PS) " ) ,
2019-10-01 13:03:04 -04:00
View ,
2019-08-14 17:43:15 -04:00
OutputViewport ,
OutputViewport ,
2020-02-06 13:13:41 -05:00
PixelShader ,
2019-08-14 17:43:15 -04:00
PassParameters ) ;
2018-10-26 19:28:13 -04:00
}
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3231693)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3219796 on 2016/12/02 by Rolando.Caloca
DR - vk - Increase timeout to 60ms
Change 3219884 on 2016/12/02 by Daniel.Wright
Assert to help track down rare crash locking capsule indirect shadow vertex buffer
Change 3219885 on 2016/12/02 by Daniel.Wright
Fixed saving a package that doesn't exist on disk but exists in p4 at a newer revision when the user chooses 'Mark Writable'
Change 3219886 on 2016/12/02 by Daniel.Wright
Don't create projected shadows when r.ShadowQuality is 0
* Fixes crash in the forward path trying to render shadows
* In the deferred path, the shadowmap was still being rendered and only the projection skipped, now all cost will be skipped
Change 3219887 on 2016/12/02 by Daniel.Wright
Changed ClearRenderTarget2D default alpha to 1, which is necessary for correct compositing
Change 3219893 on 2016/12/02 by Daniel.Wright
AMD AGS library with approved TPS
Disabled DFAO on AMD pre-GCN PC video cards to workaround a driver bug which won't be fixed (Radeon 6xxx and below)
Change 3219913 on 2016/12/02 by Daniel.Wright
Level unload of a lighting scenario propagates the lighting scenario change - fixes crash when precomputed lighting volume data gets unloaded
Change 3220029 on 2016/12/02 by Daniel.Wright
Async shader compiling now recreates scene proxies which are affected by the material which was compiled. This fixes crashes which were occuring as proxies cache various material properties, but applying compiled materials would not update these cached properties (bRequiresAdjacencyInformation).
* A new ensure has been added in FMeshElementCollector::AddMesh and FBatchingSPDI::DrawMesh to catch attempts to render with a material not reported in GetUsedMaterials
* Fixed UParticleSystemComponent::GetUsedMaterials and UMaterialBillboardComponent::GetUsedMaterials
* FMaterialUpdateContext should be changed to use the same pattern, but that hasn't been done yet
Change 3220108 on 2016/12/02 by Daniel.Wright
Fixed shadowmap channel assignment for stationary lights which are not in a lighting scenario level, when a lighting scenario level is present
Change 3220504 on 2016/12/03 by Mark.Satterthwaite
Metal Desktop Tessellation support from Unicorn.
- Apple: Metal tessellation support added to MetalShaderFormat, MetalRHI and incl. changes to engine runtime/shaders for Desktop renderer and enabled in ElementalDemo by default (OS X 10.11 will run SM4).
- Epic: Support for different Metal shader standards on Mac, iOS & tvOS which required moving some RHI functions around as this is a project setting and not a compile-time constant.
- Epic: Fragment shader UAV support, which is also tied to newer Metal shader standard like Tessellation.
- Epic: Significant refactor of MetalRHI's internals to clearly separate state-caching from render-pass management and command-encoding.
- Epic: Internal MetalRHI validation code is now cleanly separated out into custom implementations of the Metal @protocol's and is on by default.
- Epic: Various fixes to Layered Rendering for Metal.
- Omits Mobile Tessellation support which needs further revision.
Change 3220881 on 2016/12/04 by Mark.Satterthwaite
Compiles fixes for iOS & static analysis fixes from Windows.
Change 3221180 on 2016/12/05 by Guillaume.Abadie
Avoid compiling PreviousFrameSwitch's both Current Frame and Previous Frame inputs every time.
Change 3221217 on 2016/12/05 by Chris.Bunner
More NVAPI warning fixups.
Change 3221219 on 2016/12/05 by Chris.Bunner
When comparing overriden properties used to force instance recompilation we need to check against the base material, not assume the immediate parent.
#jira UE-37792
Change 3221220 on 2016/12/05 by Chris.Bunner
Exported GetAllStaticSwitchParamNames and GetAllStaticComponentMaskParamNames.
#jira UE-35132
Change 3221221 on 2016/12/05 by Chris.Bunner
PR #2785: Fix comment typo in RendererInterface.h (Contributed by dustin-biser)
#jira UE-35760
Change 3221223 on 2016/12/05 by Chris.Bunner
Default to include dev-code when compiling material preview stats.
#jira UE-20321
Change 3221534 on 2016/12/05 by Rolando.Caloca
DR - Added FDynamicRHI::GetName()
Change 3221833 on 2016/12/05 by Chris.Bunner
Set correct output extent on PostProcessUpscale (allows users to extend chain correctly).
#jira UE-36989
Change 3221852 on 2016/12/05 by Chris.Bunner
32-bit/ch EXR screenshot and frame dump output.
Fixed row increment bug in 128-bit/px surface format readback.
#jira UE-37962
Change 3222059 on 2016/12/05 by Rolando.Caloca
DR - vk - Fix memory type not found
Change 3222104 on 2016/12/05 by Rolando.Caloca
DR - Lambdaize
- Added quicker method to check if system textures are initialized
Change 3222290 on 2016/12/05 by Mark.Satterthwaite
Trivial fixes to reporting Metal shader pipeline errors - need to check if Hull & Domain exist.
Change 3222864 on 2016/12/06 by Rolando.Caloca
DR - Fix mem leak when exiting
Change 3222873 on 2016/12/06 by Rolando.Caloca
DR - vk - Minor info to help track down leaks
Change 3222875 on 2016/12/06 by Rolando.Caloca
DR - Fix mem leak with VisualizeTexture
#jira UE-39360
Change 3223226 on 2016/12/06 by Chris.Bunner
Static analysis warning workaround.
Change 3223235 on 2016/12/06 by Ben.Woodhouse
Integrate from NREAL: Set a custom projection matrix on a SceneCapture2D
Change 3223343 on 2016/12/06 by Chris.Bunner
Moved HLOD persistent data to viewstate to fix per-view compatability.
#jira UE-37539
Change 3223349 on 2016/12/06 by Chris.Bunner
Fixed HLOD with FreezeRendering command.
#jira UE-29839
Change 3223371 on 2016/12/06 by Michael.Trepka
Removed obsolete check() in FMetalSurface constructor
Change 3223450 on 2016/12/06 by Chris.Bunner
Added explicit ScRGB output device selection rather than Nvidia-only hardcoded checks. Allows easier support for Mac and other devices moving forward.
Change 3223638 on 2016/12/06 by Michael.Trepka
Restored part of the check() in FMetalSurface constructor removed in CL 3223371
Change 3223642 on 2016/12/06 by Mark.Satterthwaite
Experimental Metal EDR/HDR output support for Mac (iOS/tvOS need custom formats & shaders so they are not supported yet).
- Only available on macOS Sierra (10.12) for Macs with HDR displays (e.g. Retina iMacs).
- Enable with -metaledr command-line argument as it is off-by-default.
- Sets up the CAMetalLayer & the back-buffer for RGBA_FP16 output on Mac using DCI-P3 as the color gamut and ACES 1000 nit ScRGB output encoding.
Change 3223830 on 2016/12/06 by Rolando.Caloca
DR - vk - Better error when finding an invalid Vulkan driver
#jira UE-37495
Change 3223869 on 2016/12/06 by Rolando.Caloca
DR - vk - Reuse fences
Change 3223906 on 2016/12/06 by Guillaume.Abadie
Fix alpha through TempAA artifact causing a small darker edge layouts.
Change 3224199 on 2016/12/06 by Mark.Satterthwaite
Fix a dumb copy-paste error from the HDR changes to Metal.
Change 3224220 on 2016/12/06 by Mark.Satterthwaite
Fix various errors with Metal UAV & Render-Pass Restart support so that we can use the Pixel Shader culling for DistanceField effects.
- Unfortunately Metal requires that a texture be bound to start a render-pass, so reuse the dummy depth-stencil surface from the problematic editor preview tile rendering.
Change 3224236 on 2016/12/06 by Mark.Satterthwaite
IWYU CIS compile fix for iOS.
Change 3224366 on 2016/12/06 by Mark.Satterthwaite
Simplify some of the changes from CL# 3224220 so that we don't perform unnecessary clears.
- If the RenderPass is broken to issue compute or blit operations then treat the cached RenderTargetsInfo as invalid, unless the RenderPass is restarted.
- This guarantees that we don't erroneously ignore calls to SetRenderTargets if the calling code issues a dispatch between two RenderPasses that use the same RenderTargetsInfo.
Change 3224416 on 2016/12/06 by Uriel.Doyon
New default implementation for UPrimitiveComponent::GetStreamingTextureInfo using a conservative heuristic where the textures are stretched across the bounds.
Optimized UPrimitiveComponent::GetStreamingTextureInfoWithNULLRemoval by not handling registered components with no proxy (essentially hidden game / collision primitives).
Added blueprint support for texture streaming built data through FStaticMeshComponentInstanceData.
Fix for material texture streaming data not being available on some cooked builds.
Enabled split requests on all texture load requests (first loading everything visible and then loaded everything not visible).
This is controlled by "r.Streaming.MinMipForSplitRequest" which defines the minimum mip for which to allow splitting.
Forced residency are now loaded in two steps (visible, then forced), improving reactiveness.
Updated "stat streaming" to include "UnkownRefMips" which represent texture with no known component referencing them,
and also "LastRenderTimeMips" which related to timed primitives.
Changed "Forced Mips" so that it only shows mips that are loaded become of forced residency.
"Texture Streaming Build" now updates the map check after execution.
Removed Orphaned texture logic as this has become irrelevant with the latest retention priority logic.
Updated "r.streaming.usenewmetrics" so that it shows behavior before and after 4.12 improvements.
Change 3224532 on 2016/12/07 by Uriel.Doyon
Integrated CL 3223965 :
Building texture streaming data for materials does not wait for pending shaders to finish compilation anymore.
Added more options to allow the user to cancel this build also.
Change 3224714 on 2016/12/07 by Ben.Woodhouse
Cherry pick CL 3223972 from //fortnite/main:
Disable Geometry shader onchip on XB1. This saves 4ms for a single shadow casting point light @ 512x512 (4.8ms to 1.8ms)
Change 3224715 on 2016/12/07 by Ben.Woodhouse
New version of d3dx12.h from Microsoft which incorporates my suggested static analysis fixes. This avoids us diverging from the official version
Change 3224975 on 2016/12/07 by Rolando.Caloca
DR - vk - Dump improvements
Change 3225012 on 2016/12/07 by Rolando.Caloca
DR - Show warning if trying to use num samples != (1,2,4,8,16)
Change 3225126 on 2016/12/07 by Chris.Bunner
Added 'force 128-bit rendering pipeline' to high-res screenshot tool.
#jira UE-39345
Change 3225449 on 2016/12/07 by Chris.Bunner
Updated engine rendering defaults to better match current best practices.
#jira UE-38081
Change 3225485 on 2016/12/07 by Chris.Bunner
Moved QuantizeSceneBufferSize to RenderCore and added call for PostProcess settings. Fixes screenpercentage out-of-bounds reads in some cases.
#jira UE-19394
Change 3225486 on 2016/12/07 by Chris.Bunner
Only disable TAA during HighResScreenshots if we don't have a reasonable frame-delay enabled.
Change 3225505 on 2016/12/07 by Daniel.Wright
Fixed exponential height fog disappearing with no skybox
Change 3225655 on 2016/12/07 by Benjamin.Hyder
Updating TM-Shadermodels to include Translucent lighting, Two sided, updated cloth animation, and adjusted lighting.
Change 3225668 on 2016/12/07 by Chris.Bunner
Dirty owning packages when user manually forces regeneration of all reflection captures.
#jira UE-38759
Change 3226139 on 2016/12/07 by Rolando.Caloca
DR - Fix recompute tangents disabling skin cache
- Make some macros into lambdas
#jira UE-39143
Change 3226212 on 2016/12/07 by Daniel.Wright
Features which require a full prepass use DDM_AllOpaque instead of DDM_AllOccluders, which can be skipped if the component has bUseAsOccluder=false
Change 3226213 on 2016/12/07 by Daniel.Wright
Scene Capture 2D can specify a global clip plane, which is useful for portals
* Requires the global clip plane project setting to be enabled
Change 3226214 on 2016/12/07 by Daniel.Wright
Improved deferred shadowing with MSAA by upsampling light attenuation intelligently in the base pass
* If the current fragment's depth doesn't match what was used for deferred shadowing, the neighbor (cross pattern) with the nearest depth's shadowing is used
* Edge artifacts can still occur where the upsample fails or the shadow factor was computed per-sample due to depth / stencil testing
* Indirect Occlusion from capsule shadows also uses the nearest depth neighbor UV for no extra cost
* Base pass on 970 GTX 1.69ms -> 1.85ms (.16ms) in RoboRecall
Change 3226258 on 2016/12/07 by Rolando.Caloca
DR - Typo fix
Change 3226259 on 2016/12/07 by Rolando.Caloca
DR - compile fix
#jira UE-39143
Change 3226932 on 2016/12/08 by Chris.Bunner
Re-saved Infiltrator maps to update reflection captures.
#jira UE-38759
Change 3227063 on 2016/12/08 by Mark.Satterthwaite
For Metal platforms ONLY temporarily disable USE_LIGHT_GRID_REFLECTION_CAPTURE_CULLING to avoid UE-37436 while the Nvidia driver team investigate why this doesn't work for them but does for the others. This won't affect non-Metal platforms and the intent is to revert this prior to 4.16 provided we can work through the problem with Nvidia.
#jira UE-37436
Change 3227120 on 2016/12/08 by Gil.Gribb
Merging //UE4/Dev-Main@3226895 to Dev-Rendering (//UE4/Dev-Rendering)
Change 3227211 on 2016/12/08 by Arne.Schober
DR - UE-38585 - Fixing crash where HierInstStaticMesh duplication fails. Also reverting the fix from UE-28189 which is redundant.
Change 3227257 on 2016/12/08 by Marc.Olano
Extension to PseudoVolumeTexture for more flexible layout
Change by ryan.brucks
Change 3227286 on 2016/12/08 by Rolando.Caloca
DR - Fix crash when using custom expressions and using reserved keywords
#jira UE-39311
Change 3227376 on 2016/12/08 by Mark.Satterthwaite
Must not include a private header inside the MenuStack public header as that causes compile errors in plugins.
Change 3227415 on 2016/12/08 by Mark.Satterthwaite
Fix shader compilation due to my disabling of USE_LIGHT_GRID_REFLECTION_CAPTURE_CULLING on Metal - InstancedCompositeTileReflectionCaptureIndices needs to be defined even though Metal doesn't support instanced-stereo rendering.
Change 3227516 on 2016/12/08 by Daniel.Wright
Implemented UWidgetComponent::GetUsedMaterials
Change 3227521 on 2016/12/08 by Guillaume.Abadie
Fixes post process volume's indirect lighting color.
#jira UE-38888
Change 3227567 on 2016/12/08 by Marc.Olano
New upscale filters: Lanczos-2 (new default), Lanczos-3 and Gaussian Unsharp Mask
Change 3227628 on 2016/12/08 by Daniel.Wright
Removed redundant ResolveSceneDepthTexture from the merge
Change 3227635 on 2016/12/08 by Daniel.Wright
Forward renderer supports shadowing from movable lights and light functions
* Only 4 shadow casting movable or stationary lights can overlap at any point in space, otherwise the movable lights will lose their shadows and an on-screen message will be displayed
* Light functions only work on shadow casting lights since they need a shadowmap channel to be assigned
Change 3227660 on 2016/12/08 by Rolando.Caloca
DR - vk - Fix r.MobileMSAA on Vulkan
- r.MobileMSAA is now read-only (to be fixed on 4.16)
- Show time for PSO creation hitches
#jira UE-39184
Change 3227704 on 2016/12/08 by Mark.Satterthwaite
Fix Mac HDR causing incorrect output color encoding being used, HDR support is now entirely off unless you pass -metaledr which will enable it regardless of whether the current display supports HDR (as we haven't written the detection code yet). Fixed the LUT/UI compositing along the way - Mac Metal wasn't using volume LUT as it should have been, RHISupportsVertexShaderLayer now correctly returns false for non-Mac Metal platforms.
Change 3227705 on 2016/12/08 by Daniel.Wright
Replaced built-in samplers in the nearest depth translucency upsample because the built-in samplers are no longer bound on PC (cl 2852426)
Change 3227787 on 2016/12/08 by Chris.Bunner
Added extent clear to motion blur pass to catch misized buffers bringing in errors.
Added early out to clear call when excluded region matches RT region.
#jira UE-39437
Change 3228177 on 2016/12/08 by Marc.Olano
Fix DCC sqrt(int) error
Change 3228285 on 2016/12/08 by Chris.Bunner
Back out changelist 3225449.
#jira UE-39528
Change 3228680 on 2016/12/09 by Gil.Gribb
Merging //UE4/Dev-Main@3228528 to Dev-Rendering (//UE4/Dev-Rendering)
Change 3228940 on 2016/12/09 by Mark.Satterthwaite
Editor fixes for 4.15:
- PostProcessTonemap can't fail to bind a texture to the ColorLUT or the subsequent rendering will be garbage: the changes for optimising stereo rendering forgot to account for the Editor's use of Views without States for the asset preview thumbnails. Amended the CombineLUT post-processing to allocate a local output texture when there's no ViewState and read from this when this situation arises which makes everything function again.
- Don't start render-passes without a valid render-target-array in MetalRHI.
Change 3228950 on 2016/12/09 by Mark.Satterthwaite
Make GPUSkinCache run on Mac Metal - it wasn't working because it was forcibly disabled on all platforms but for Windows D3D 11.
- Fixed the Skeleton editor tree trying to access a widget before it has been constructed.
- Enable GPUSkinCache for Metal SM5: doesn't render correctly, even on AMD, so needs Radar's filing and investigation.
#jira UE-39256
Change 3229013 on 2016/12/09 by Mark.Satterthwaite
Further tidy up in SSkeletonTreeView as suggested by Nick.A.
Change 3229101 on 2016/12/09 by Chris.Bunner
Log compile error fix and updated cvar comments.
Change 3229236 on 2016/12/09 by Ben.Woodhouse
XB1 D3D11 and D3D12: Use the DXGI frame statistics to get accurate GPU time unaffected by bubbles
Change 3229430 on 2016/12/09 by Ben.Woodhouse
PR #2680: Optimized histogram generation. (Contributed by PjotrSvetachov)
Profiled on nvidia 980GTX (2x faster), and on XB1 (marginally faster)
Change 3229580 on 2016/12/09 by Marcus.Wassmer
DepthBoundsTest for AMD.
Change 3229701 on 2016/12/09 by Michael.Trepka
Changed "OS X" to "macOS" in few places where we display it and updated the code that asks users to update to latest version to check for 10.12.2
Change 3229706 on 2016/12/09 by Chris.Bunner
Added GameUserSettings controls for HDR display output.
Removed Metal commandline as this should replace the need for it.
Change 3229774 on 2016/12/09 by Michael.Trepka
Disabled OpenGL on Mac. -opengl is now ignored, we always use Metal. On old Macs that do not support Metal we show a message saying that the app requires Metal and exit.
Change 3229819 on 2016/12/09 by Chris.Bunner
Updated engine rendering defaults to better match current best practices.
#jira UE-38081
Change 3229948 on 2016/12/09 by Rolando.Caloca
DR - Fix d3d debug error
#jira UE-39589
Change 3230341 on 2016/12/11 by Mark.Satterthwaite
Don't fatally assert that the game-thread stalled waiting for the rendering thread in the Editor executable, even when running -game as the rendering thread can take a while to respond if shaders need to be compiled.
#jira UE-39613
Change 3230860 on 2016/12/12 by Marcus.Wassmer
Experimental Nvidia AFR support.
Change 3230930 on 2016/12/12 by Mark.Satterthwaite
Disable RHICmdList state-caching on Mac - Metal already does this internally and depends on receiving all state changes in order to function.
Change 3231252 on 2016/12/12 by Marcus.Wassmer
Fix NumGPU detection. (SLI only crash)
Change 3231486 on 2016/12/12 by Mark.Satterthwaite
Fix a stupid mistake in MetalStateCache::CommitResourceTable that would unnecessarily rebind samplers.
Change 3231661 on 2016/12/12 by Mark.Satterthwaite
Retain the RHI samplers in MetalRHI to guarantee lifetime.
[CL 3231696 by Gil Gribb in Main branch]
2016-12-12 17:47:42 -05:00
2021-11-18 14:37:34 -05:00
View . EnqueueEyeAdaptationExposureTextureReadback ( GraphBuilder ) ;
2019-08-14 17:43:15 -04:00
return OutputTexture ;
2019-06-11 18:27:07 -04:00
}
2021-11-18 14:37:34 -05:00
FSceneViewState : : FEyeAdaptationManager : : FEyeAdaptationManager ( )
{
ExposureReadbackTextures . AddZeroed ( MAX_READBACK_BUFFERS ) ;
ExposureReadbackBuffers . AddZeroed ( MAX_READBACK_BUFFERS ) ;
}
2019-03-28 10:37:04 -04:00
2020-09-24 00:43:27 -04:00
void FSceneViewState : : FEyeAdaptationManager : : SafeRelease ( )
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
{
2020-09-24 00:43:27 -04:00
CurrentBuffer = 0 ;
2021-11-18 14:37:34 -05:00
ReadbackBuffersWriteIndex = 0 ;
ReadbackBuffersNumPending = 0 ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
2021-11-18 14:37:34 -05:00
LastExposure = 0 ;
LastAverageSceneLuminance = 0 ;
for ( int32 Index = 0 ; Index < NUM_BUFFERS ; Index + + )
2020-09-24 00:43:27 -04:00
{
PooledRenderTarget [ Index ] . SafeRelease ( ) ;
2021-05-04 07:16:55 -04:00
ExposureBufferData [ Index ] . SafeRelease ( ) ;
2021-11-18 14:37:34 -05:00
}
for ( int32 Index = 0 ; Index < ExposureReadbackTextures . Num ( ) ; + + Index )
{
if ( ExposureReadbackTextures [ Index ] )
{
delete ExposureReadbackTextures [ Index ] ;
ExposureReadbackTextures [ Index ] = nullptr ;
}
}
for ( int32 Index = 0 ; Index < ExposureReadbackBuffers . Num ( ) ; + + Index )
{
if ( ExposureReadbackBuffers [ Index ] )
{
delete ExposureReadbackBuffers [ Index ] ;
ExposureReadbackBuffers [ Index ] = nullptr ;
}
2020-09-24 00:43:27 -04:00
}
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
}
2021-11-18 14:37:34 -05:00
FRHIGPUTextureReadback * FSceneViewState : : FEyeAdaptationManager : : GetLatestReadbackTexture ( )
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
{
2021-11-18 14:37:34 -05:00
FRHIGPUTextureReadback * LatestReadbackTexture = nullptr ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
2021-11-18 14:37:34 -05:00
// Find latest texture that is ready
while ( ReadbackBuffersNumPending > 0 )
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
{
2021-12-07 13:37:50 -05:00
uint32 Index = ( ReadbackBuffersWriteIndex + MAX_READBACK_BUFFERS - ReadbackBuffersNumPending ) % MAX_READBACK_BUFFERS ;
2021-11-18 14:37:34 -05:00
if ( ExposureReadbackTextures [ Index ] - > IsReady ( ) )
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
{
2021-11-18 14:37:34 -05:00
- - ReadbackBuffersNumPending ;
LatestReadbackTexture = ExposureReadbackTextures [ Index ] ;
2020-09-24 00:43:27 -04:00
}
2021-11-18 14:37:34 -05:00
else
2020-09-24 00:43:27 -04:00
{
2021-11-18 14:37:34 -05:00
break ;
2019-06-11 18:27:07 -04:00
}
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
}
2021-11-18 14:37:34 -05:00
return LatestReadbackTexture ;
}
void FSceneViewState : : FEyeAdaptationManager : : SwapTextures ( )
{
CurrentBuffer = ( CurrentBuffer + 1 ) % NUM_BUFFERS ;
}
void FSceneViewState : : FEyeAdaptationManager : : UpdateLastExposureFromTexture ( )
{
QUICK_SCOPE_CYCLE_COUNTER ( STAT_FEyeAdaptationRTManager_ReadbackLastExposure ) ;
// Get the most up to date value
FRHIGPUTextureReadback * ReadbackTexture = GetLatestReadbackTexture ( ) ;
if ( ReadbackTexture )
{
// Read the last request results.
2021-12-16 18:22:06 -05:00
int32 RowPitch = 0 ;
FVector4f * ReadbackData = ( FVector4f * ) ReadbackTexture - > Lock ( RowPitch ) ;
2021-11-18 14:37:34 -05:00
if ( ReadbackData )
{
LastExposure = ReadbackData - > X ;
LastAverageSceneLuminance = ReadbackData - > Z ;
ReadbackTexture - > Unlock ( ) ;
}
}
}
void FSceneViewState : : FEyeAdaptationManager : : EnqueueExposureTextureReadback ( FRDGBuilder & GraphBuilder )
{
check ( PooledRenderTarget [ CurrentBuffer ] . IsValid ( ) ) ;
if ( ReadbackBuffersNumPending < MAX_READBACK_BUFFERS )
{
2022-04-04 19:23:28 -04:00
// limit to single bit here for readback to work
RDG_GPU_MASK_SCOPE ( GraphBuilder , FRHIGPUMask : : FromIndex ( GraphBuilder . RHICmdList . GetGPUMask ( ) . GetFirstIndex ( ) ) ) ;
2022-01-31 17:22:31 -05:00
FRDGTextureRef CurrentTexture = GraphBuilder . RegisterExternalTexture ( PooledRenderTarget [ CurrentBuffer ] , ERDGTextureFlags : : MultiFrame ) ;
2021-11-18 14:37:34 -05:00
FRHIGPUTextureReadback * ExposureReadbackTexture = ExposureReadbackTextures [ ReadbackBuffersWriteIndex ] ;
if ( ExposureReadbackTexture = = nullptr )
{
static const FName ExposureValueName ( TEXT ( " Scene view state exposure readback " ) ) ;
ExposureReadbackTexture = new FRHIGPUTextureReadback ( ExposureValueName ) ;
ExposureReadbackTextures [ ReadbackBuffersWriteIndex ] = ExposureReadbackTexture ;
}
AddEnqueueCopyPass ( GraphBuilder , ExposureReadbackTexture , CurrentTexture ) ;
ReadbackBuffersWriteIndex = ( ReadbackBuffersWriteIndex + 1 ) % MAX_READBACK_BUFFERS ;
ReadbackBuffersNumPending = FMath : : Min ( ReadbackBuffersNumPending + 1 , MAX_READBACK_BUFFERS ) ;
}
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
}
2020-09-24 00:43:27 -04:00
const TRefCountPtr < IPooledRenderTarget > & FSceneViewState : : FEyeAdaptationManager : : GetTexture ( uint32 TextureIndex ) const
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
{
2021-11-18 14:37:34 -05:00
check ( 0 < = TextureIndex & & TextureIndex < NUM_BUFFERS ) ;
2020-09-24 00:43:27 -04:00
return PooledRenderTarget [ TextureIndex ] ;
}
const TRefCountPtr < IPooledRenderTarget > & FSceneViewState : : FEyeAdaptationManager : : GetOrCreateTexture ( FRHICommandList & RHICmdList , uint32 TextureIndex )
{
2021-11-18 14:37:34 -05:00
check ( 0 < = TextureIndex & & TextureIndex < NUM_BUFFERS ) ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
// Create textures if needed.
2020-09-24 00:43:27 -04:00
if ( ! PooledRenderTarget [ TextureIndex ] . IsValid ( ) )
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
{
// Create the texture needed for EyeAdaptation
2019-10-01 13:03:04 -04:00
FPooledRenderTargetDesc Desc ( FPooledRenderTargetDesc : : Create2DDesc ( FIntPoint ( 1 , 1 ) , PF_A32B32G32R32F , FClearValueBinding : : None , TexCreate_None , TexCreate_RenderTargetable | TexCreate_ShaderResource , false ) ) ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
if ( GMaxRHIFeatureLevel > = ERHIFeatureLevel : : SM5 )
{
2022-01-31 17:22:31 -05:00
Desc . Flags | = TexCreate_UAV ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
}
2022-01-13 17:56:22 -05:00
GRenderTargetPool . FindFreeElement ( RHICmdList , Desc , PooledRenderTarget [ TextureIndex ] , TEXT ( " EyeAdaptation " ) ) ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
}
2020-09-24 00:43:27 -04:00
return PooledRenderTarget [ TextureIndex ] ;
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3680113)
#lockdown Nick.Penwarden
#rb none
============================
MAJOR FEATURES & CHANGES
============================
Change 3441680 by Uriel.Doyon
Added units to point light intensity, to allow the user to specify the value in candelas or lumens.
New point light actors now configure the intensity in candelas by default.
Replaced viewport exposure settings by an EV100 slider.
Hidding the tone mapper in the show flag now still applies the exposure.
Added a new AutoExposure method called EV100 which allows to specify :
- MinEV100, MaxEV100
- Calibration Constnat
- Exposure Compensation
#jira UE-42783
Change 3454934 by Chris.Bunner
Backing out changelists 3441680, 3454636 and 3454844 for the sake of integration stability.
Change 3629223 by Rolando.Caloca
DR - Rollback //UE4/Dev-Rendering/Engine/Source/Runtime/VulkanRHI to changelist 3627847
Change 3629708 by Rolando.Caloca
DR - vk - Redo some changes from DevMobile
3601439
3604186
3606672
3617383
3617474
3617483
Change 3636145 by Chris.Bunner
Linux compile fix.
Change 3636198 by Chris.Bunner
Include fix.
Change 3636225 by Daniel.Wright
Removed spammy draw event
Change 3636397 by Daniel.Wright
Visualize volumetric lightmaps uses 18% grey in lit mode
Change 3636398 by Daniel.Wright
Translucency lighting modes work with Volumetric Lightmaps
* The old Indirect Lighting Cache always interpolated one sample per object, while Volumetric lightmaps operate at the frequency of the Translucency Lighting Mode (per-vertex or per-pixel) so the lighting accuracy is much higher.
* The old ILC always applied the single lighting sample with a per-pixel normal, even in per-vertex lighting modes
* Volumetric PerVertex NonDirectional (cheapest lit translucency) went from 74 instructions down to 42
* Volumetric Directional went from 104 up to 122
Change 3636604 by Chris.Bunner
Added a material translation error on identically named/associated but differently valued parameters as this will cause one of them to be lost during parameter evaluation, the result being "random".
Change 3637668 by Rolando.Caloca
DR - hlslcc - Skip preprocessor when not required which reduces peak mem consumption by ~500 MB
- Fix missing indexing on intrinsic return type
Change 3638541 by Chris.Bunner
Fixed editor materials - Skip hardcoded parameter names that we rely on being overridden when checking for non-matching duplicate parameters.
Change 3638798 by Mark.Satterthwaite
Rebuilt hlslcc for Mac for Rolando's 3637668 changes.
Change 3638861 by Mark.Satterthwaite
Missed making a log verbose in the Metal ring-buffer.
Change 3639482 by Rolando.Caloca
DR - vk - Minor fixes
Change 3639909 by Michael.Lentine
Add special case for struct needed to compile.
Workaround issues in parser such that (x)[0] is replaced with x[0] and (x).a is replaced with x.a.
Change 3639916 by Michael.Lentine
Spelling fix.
Change 3640053 by Mark.Satterthwaite
Fix Desktop Forward rendering on Nvidia Metal rendering on macOS by modifying the shader and runtime to treat ForwardLocalLightBuffer data as uint rather than float and invert the use of as*() casts.
Tthis is *necessary* to avoid a bug/limitation of Nvidia's current Metal shader compiler that flushes all denorm values to zero on load from any resource. AMD & iOS Metal only flush-to-zero when sampling from textures and that's what Apple regard as the expected behaviour. I have however asked them to standardise on the D3D behaviour of preserving denorms on all load, move (incl. min/max/as*()-casts) & store operations. This won't happen in the current or imminent OS/Xcode releases.
Now only Intel Metal is broken and their problems run deeper.
#jira UE-48881
Change 3640983 by Olaf.Piesche
Cache the depth buffer collision shader for GPU particles even when simple forward is enabled, as that can be turned off at runtime.
#jira UE-48799
Change 3641480 by Michael.Lentine
Add min16float to FP16Math
Change 3642442 by Mark.Satterthwaite
Fix the native shader libraries again & undo the increase in cook time from changes to the way FShaderCodeLibrary was compiling & deduplicating the shaders.
- Remvoe the single linear array for accumulated shader code: reallocating this is tremendously expensive and will double the time taken to iteratively cook large projects.
- Uncompress the shader data for the native library system so that it actually works again.
- Fix some errant change to the Metal compiler that was trying to wedge the fully compiled library into the single Metal library which is 100% bogus.
#jira UE-49192
Change 3642919 by Chris.Bunner
Reverted unintended changes to material static parameter set serialization.
Bumped material version to force re-serialization.
Fixed a few typos.
Change 3642923 by Richard.Wallis
Fix for "Pixel Inspector On" message not disappearing when closing pixel inspector window while on. Handle tab closed events to cancel the pixel inspector if window closed while running.
#jira UE-46504
Change 3643296 by Michael.Lentine
Convert all structures that aren't use globally to halfs.
Change 3643381 by Ryan.Brucks
New Plugin allowing Blueprint Texture and RT reads as well as MIC creation and modification.
Change 3643929 by Ben.Salem
Added better precision on thread values in Perf Monitor. Also added global thread values to go with per-world ones to help track down the most accurate numbers possible.
#tests Ran locally, changes validated by benj
Change 3644203 by Mark.Satterthwaite
Refactor mtlpp a little bit to make the compiler do more of the work & update for all the latest publicly exposed APIs.
Change 3644336 by Mark.Satterthwaite
Ref-count the mtlpp Device object so that it can be the repository for IMP caching - now just have to go through the types created from a specific device and have them keep a reference....
Change 3644431 by Uriel.Doyon
Added a intensity units property, for point lights and spot lights, that can be set to Candelas, Lumens or Unitless (legacy).
The default units value for newly placed point lights and spot lights is configured in the project settings.
Spot lights configured in lumens have their whole luminous energy redirected toward the cone.
This means that changing the outer cone angle, changes the spot light brightness.
New exposure menu that uses an EV100 slider.
New post process settings "camera" tab regrouping : ShutterSpeed, ISO, Aperture and ExposureCompensation.
Post process settings "auto exposure" tab renamed "exposure".
The calibration constant for "Auto Exposure Basic" is now configurable in the advanced tab.
The auto exposure method is renamed "Metering Mode"
New pre-exposure feature that allows the engine to apply the previous frame exposure before writing to the scene color.
This allows the engine to render the scene with similar range than the final color (after exposure), and avoid arithmetic overflow for low precision RT formats.
The amount of exposure applied directly is called pre-exposure, and is compensated by a smaller post-exposure value.
Change 3645098 by Marcus.Wassmer
Don't add meshes twice when in simpleforward
Change 3645551 by Daniel.Wright
VolumetricScatteringIntensity is greyed out based on Mobility
Change 3645707 by Chris.Bunner
Skip empty parameters when identifying invalid duplicates during material translation.
Change 3646225 by Uriel.Doyon
Texture streaming support for particle sub-uv
Change 3646323 by Rolando.Caloca
DR - vk - Fix bad update texture 2/3d parameters
Change 3646463 by Mark.Satterthwaite
Metal shader files that can serve as extensions to the metal_stdlib rather than trying to wedge even more into the shader compiler. Might as well leverage Metal's C++'ness.
Currently just a skeleton of a buffer type that would better emulate HLSL Buffer<>/RWBuffer<> objects.
Change 3646727 by Marcus.Wassmer
fix linux and nonunity compiles
Change 3647777 by Rolando.Caloca
DR - Mobile Vulkan optimization
Change 3647822 by Lauren.Ridge
Layers are now renameable (except Layer 0 is always "Background") in Material Layers Functions
Change 3647918 by Chris.Bunner
Static analysis fixes - Monolithic include, forward delcared enums, locally shadowed variable.
Change 3648010 by Michael.Lentine
Don't use min16float by default.
Change 3648015 by Michael.Lentine
Add special case fixes for min16float as well as half on console.
Change 3648024 by Lauren.Ridge
Moving MaterialLayersFunctions Layer naming to EditorOnly wrappers
Change 3648127 by Lauren.Ridge
Moving name getter functionality to FMaterialLayersFunctions
Change 3648265 by Lauren.Ridge
Fixing loctext key
Change 3648293 by Rolando.Caloca
DR - D3D12 fix
Change 3648326 by Rolando.Caloca
DR - vk - Added subrectangle support when updating Texture2D and Texture3D
Change 3648522 by Rolando.Caloca
DR - vk - Do not try to create a BufferView of a StructuredBuffer (no valid pixelformat)
Change 3648612 by Rolando.Caloca
DR - vk - Implement RHIMapStagingSurface
Change 3648673 by Rolando.Caloca
DR - vk - Reduce Vulkan pipeline cache disk size by filtering duplicated shader ucodes
Change 3648913 by Arne.Schober
DR - Performance optimization during HLod traversal. using vector load and avoiding array copy by passing it through reference instead through value.
Change 3649443 by Daniel.Wright
Exposed EmissiveBoost, since Lightmass supports Emissive areas on meshes
Change 3650436 by Mark.Satterthwaite
Implemented the necessary extensions for Metal shading language to move lots of complexity out of MetalBackend and into actual shader code to make life *vastly* simpler.
- Full ue4::typed_buffer<T> wrapper type & associated ue4::buffer<>/ue4::buffer_atomic<> API - totally untested but should be functionally equivalent to HLSL Buffer<T>/RWBuffer<T>.
- All the sensible casts I can think of are now defined in ue4_format - any additional ones can just be added. The enurm of formats needs to be exposed to MetalRHI so we upload the correct values, but this should be trivial.
- Added a full series of wrappers around texturecube_array and depthcube_array to insulate code from whether it is backed by a real cube_array or a texture2d_array so we don't have to maintain complicated variants for new/old iOS devices.
- Added implementations for a bunch of annoying HLSL & GLSL intrinsics that were being matched by name + reverse_bits which needs a custom implementation on old shader standards.
Change 3650861 by Rolando.Caloca
DR - vk - Fix warnings
Change 3651116 by Rolando.Caloca
DR - vk - Support for compressed saved PSO cache
Change 3651321 by Rolando.Caloca
DR - vk - Prep for load multiple PSO files
Change 3651337 by Chris.Bunner
Editor-only default material fallback (hardcoded material).
#jira UE-48404
Change 3651839 by Rolando.Caloca
DR - vk - Integrate minor pipeline changes
Change 3652042 by Mark.Satterthwaite
More work on mtlpp:
- Selector class that caches IMP from SEL & Class.
- Fixes to ns::Error.
- Added test case application for testing denorm & float reinterpret-cast behaviour on Metal.
Change 3652370 by Uriel.Doyon
New "stat StreamingOverview" giving high level metrics of texture usage.
New function ResetAverageRequiredTexturePoolSize() and GetAverageRequiredTexturePoolSize() giving the average ideal value for "r.streaming.poolsize".
Change 3653658 by Chris.Bunner
Material vertex interpolator for sprite and gpu sprite particles.
Change 3653676 by Rolando.Caloca
DR - vk - Integrate changes: Multiple PSO caches, shared ucode & compression, size reduction up to 80%
Change 3653940 by Daniel.Wright
Moved Volumetric Lightmap textures out of FScene and into FPrecomputedVolumetricLightmapData so their lifetime can match the MapBuildData. This allows tossing the source BulkData in game after RHI texture creation even though switching lighting scenarios does Release/InitializeRenderingResources multiple times.
Change 3653956 by Daniel.Wright
Fixed leak of BatchVisibilityId's
Change 3653991 by Daniel.Wright
Fixed missing include
Change 3654013 by Daniel.Wright
Refactored reflection capture composite SM4 handling, now forces fully rough even if !REFLECTION_COMPOSITE_USE_BLENDED_REFLECTION_CAPTURES (forward shading default)
Change 3654018 by Daniel.Wright
Remove unused SM4 reflection capture cubemap
Change 3654118 by Rolando.Caloca
DR - vk - Fix for queries; support for r.Vulkan.ProfileCmdBuffers to only time cmd buffers w/o gpu bubbles
Change 3654339 by Chris.Bunner
Temporarily disabed a material error whilst working with content teams to fix the introduced bugs.
Change 3654534 by Daniel.Wright
Editor is only supported on Feature Level 5 platforms. Added a message box and exit when SM4 is detected (d3d10, OpenGL 3).
Change 3654751 by Rolando.Caloca
DR - vk - Add readback for RGB10A2; minor optimization
Change 3654940 by Rolando.Caloca
DR - vk - Warning fix
Change 3655104 by Mark.Satterthwaite
Add a bunch of code to mtlpp to wrap the Xcode command-line Metal tools and use them to provide a convenient command-line tool that can compile two Metal shaders & diff the resulting AIR to make debugging easier. Obviously this only works on macOS.
Change 3655173 by Jian.Ru
Render dithered material as masked if a stencil prepass is not used
#jira UE-50064, UE-49537
Change 3655479 by Daniel.Wright
Fixed HandleLegacyMapBuildData not getting called on P maps loaded in the editor, which apparently was dropped in an integration error, causing all legacy maps (before the BuildData change) to lose their built lighting.
Change 3656341 by Richard.Wallis
Metal validation checks to test for drawing of the end of a vertex stream as seen in UE-48172 (Landscape Mesh Flickers Rapidly When Using Sculpting Landscape). This is not a fix for that but just a error log to catch the bad draw calls.
#jira UE-48172
Change 3656844 by Rolando.Caloca
DR - vk - Avoid microcode copy
- Fix link error
Change 3656894 by Rolando.Caloca
DR - vk - Enable api dump without needing validation enabled
Change 3656915 by Marcus.Wassmer
Fix DX12 buffer lock for read
Change 3657166 by Rolando.Caloca
DR - vk - Proper fix for api dump layer
Change 3657401 by Rolando.Caloca
DR - vk - Linux compile fix
Change 3657607 by Rolando.Caloca
DR - vk - Prep for changes
Change 3658722 by Chris.Bunner
Refresh shared texture samplers when changing max ansiotropy level (e.g. scalability settings).
#jira UE-30086
Change 3659499 by Daniel.Wright
Moved bEnableAutoLODGeneration to LOD category so it's not the only one in HLOD category
Change 3659644 by Mark.Satterthwaite
D3D11 equivalent to 3656341 (only enabled when -d3ddebug is) to validate DrawIndexedPrimitives isn't trying to draw off the end of the instanced vertex streams which has inconsistent (and potentially undefined) behaviour across the various APIs we support. This fires when painting the landscape because the code attempts to render with a FirstInstance value that is as large as the number of elements in the instance-data streams which D3D11 drivers silently fails to render, but which Metal (& probably Vulkan too) will renders as garbage. This pattern is wrong & will be even more dangerous in a Draw*Indirect world.
#jira UE-48172
Change 3659831 by Rolando.Caloca
DR - vk - Copy 3657927 (fixes for Mali)
Change 3661921 by Rolando.Caloca
DR - vk - Minor log/info changes
Change 3661985 by Mark.Satterthwaite
Change the Metal sampler filter translation to better match D3D.
Change 3662050 by Richard.Wallis
Compile fix for Metal enums.
Change 3662062 by Rolando.Caloca
DR - Copy from 3662060
- OpenGL cloth fix
Change 3662100 by Mark.Satterthwaite
Use a temporary file and an atomic move to put the Metal PCH into the right place and reduce the number of false PCH compile failures on the build farm.
Change 3662253 by Daniel.Wright
Reflection Captures support Lighting Scenarios without recapturing
* Reflection Captures are now part of the Map Build
* Modifying a capture in editor will display a preview, but game can only display built captures (black for unbuilt with screen message)
* Reflection Capture build data moved to the BuildData package
* Building lighting / reflection captures no longer dirties ULevels
* Sky lights which capture the scene now work correctly with Lighting Scenarios
* Lighting Scenarios must now be loaded for each time they are made visible (no switching back and forth while keeping both loaded)
Change 3663215 by Mark.Satterthwaite
Initial, incomplete, tool added to mtlpp to help debug macOS Internal Compiler Errors - the mtlpp command-line tool can be fed the debug output from UE4 along with compiler settings to automatically compile shaders and construct the render pipeline that crashes the runtime compiler.
So far only macOS render-pipeline-states are supported currently.
Change 3663293 by Mark.Satterthwaite
Added Metal device selection to the mtlpp command-line tool so I can quickly test compile on dual-GPU Macbook Pro's.
Change 3663471 by Daniel.Wright
Reflection Capture Builds no longer use UEditorLevelUtils::SetLevelVisibility to control level visibility, which streams out sublevels, modifying nav mesh
Fixed status updates during Reflection Capture Build
Captures overflowing GMaxNumReflectionCaptures now log a warning instead of pretending that they built successfully
Change 3664056 by Rolando.Caloca
DR - Linux compile fix
Change 3664460 by Daniel.Wright
Restored unused LoadTimesObjectVersion, packages saved with it will issue a warning on load
Change 3664802 by Uriel.Doyon
Fixed flash created by pre-exposure when the value changed dramatically between frames
Change 3664890 by Daniel.Wright
Created 'Stat MapBuildData' to track the memory size of lighting and reflection capture build outputs
Change 3665163 by Rolando.Caloca
DR - Copy from 3665156
- Gracefully fail when there are mem leaks exiting Vulkan
Change 3665629 by Daniel.Wright
Only Surface domain materials cast shadows in Lightmass
Change 3665855 by Marcus.Wassmer
PR #4032: Fix comparison of SceneColorFormat (Contributed by Hybrid0)
Change 3666707 by Guillaume.Abadie
Replaces some custom material node to get View.BufferSizeAndInvSize with ViewProperty material expression in some engine material functions.
Change 3667239 by Rolando.Caloca
DR - Use hlslcc define for common issues
Change 3668108 by Brian.Karis
Disabled to Catmull-Rom filter. Too many flickering issues. Disabled antiflicker as well.
Change 3668157 by Mark.Satterthwaite
In the prototype Metal stdlib extension library add inline versions of the D3D SM6 "wave" intrinsics that can be expressed in terms of Metal 2.0 simd/quad group operations (macOS=simd, iOS=quad). These are unlikely to be as efficient as direct intrinsics but they should be functionally equivalent.
These functions are not available *yet* as I still need to hook the ue4_stdlib into MetalShaderFormat & MetalRHI.
The following HLSL 6 functions are implemented:
WaveAllBitAnd
WaveAllMax
WaveAllMin
WaveAllBitOr
WaveAllBitXor
WaveAllEqual
WaveAllProduct
WaveAllSum
WaveAllTrue
WaveAnyTrue
WaveBallot
WaveGetLaneCount
WaveGetLaneIndex
WaveOnce
WavePrefixProduct
WavePrefixSum
WaveReadFirstLane
WaveReadLaneAt
The following can't be implemented in Metal as of Metal 2.0 AFAIK:
WaveGetOrderedIndex
WaveIsHelperLane
GlobalOrderedCountIncrement
QuadReadLaneAt
QuadSwapX
QuadSwapY
Change 3668260 by Olaf.Piesche
Cache particle collision shaders regardless of simple forward state
Missed this checkin
#jira FORT-51307
Change 3669243 by Daniel.Wright
Bumped shader version to propagate FReflectionCaptureData rename
Change 3669369 by Mark.Satterthwaite
Duplicating Metal changes from //UE4/Release-4.18 to Dev-Rendering (//UE4/Dev-Rendering)
3662503 Collapse system-variables to one declaration in MetalUtils to avoid later shader compiler errors when they are specified more than once, which is seemingly permissable. Fixes volumetric fog.
#jira UE-50293
3665210 - Invalidate all Metal shaders again to force a recompile to workaround another driver bug.
- On macOS compact the clip-distance value into a single output to avoid bugs in the runtime pipeline compilers.
- In SCW's direct-compile mode MetalShaderForamt should always dump the resulting Metal shader and print any errors we encounter to the log.
- Change FGenerateMetalVisitor to take a FMetalCodeBackend& not a FMetalCodeBackend* to avoid a lot of pointless pointer validation.
#jira UE-50244
3665429 Fix a crash on shutdown due to MetalRHI caching vertex-declarations beyond the lifetime of the RHI by moving the cache into the FMetalDynamicRHI itself.
#jira UE-50356
3665613 Fix DistanceField rendering on Metal & the associated validation layer error when it is enabled - MetalRHI can't use the same approach as Vulkan without a bit more work.
#jira UE-50364
3667584 Fix black flickering on some materials that use World Position Offset - the Metal sincos intrinsic comes into two flavours for single precision floats and we want the precise version not the fast version. The "cross" implementation needed a few more fma's too and this change has to invalidate Metal shaders again to take effect.
#jira UE-50399
3667805 Changing sincos in Metal fragment shaders had undesirable side-effects - the compiler is now re-associating another floating point operation - so limit the use of precise::sincos to vertex-shaders for now. This fixes the WPO materials without causing any other obvious problems.
#jira UE-50399
Change 3669912 by Mark.Satterthwaite
Fix Metal compilation for PCSS shadows - the HLSL that is compiled uses both SampleCmp and Sample which GLSL disallows (shadowSampler types in GLSL only allow SampleCmp) but is perfectly valid in Metal where only the texture type declaration changes.
Duplicate MetalBackend.cpp changes from Joe.Graf's: 3667781
Fixed an extra ) being emitted during HLSL->Metal translation
Added depthcube_array support per Mark's instructions
Change 3670308 by Mark.Satterthwaite
Missing autorelease pool blocks in MetalTexture functions.
Change 3670989 by Mark.Satterthwaite
Stop trying to be so clever with Metal clip-distances: AMD have a bug in 10.13.0 that means we can only emit one clip-distance value, so simply emit the value with the lowest index (we have handily ordered them by importance!) and let the others become user-interpolators until this bug is resolved in a macOS SU (according to Max@AMD the fix is in, just not in time for 4.18). This means planar reflections will work, VR no-multi-view-fallback will work & layered rendering will work either individually or together - the difference being that on macOS *only* the VR no-multi-view-fallback & layered rendering paths may be slower when combined with the global clip plane.
Hit & run fix to MetalCaptureManager and availability of tile-shader functions while I'm here.
#jira UE-50518
Change 3671014 by Mark.Satterthwaite
Correct handling of RowLinearPVRTC blits for iOS Metal desired for Ocean.
Change 3671575 by Rolando.Caloca
DR - Copy 3668036
Stop syncing CPU with GPU on Vulkan
Change 3671637 by Rolando.Caloca
DR - Copy 3670937
Fixes Vulkan editor outline
Change 3672309 by Mark.Satterthwaite
Submitted on behalf of Richard Wallis:
Only disable V-Sync on Metal in macOS 10.13 when running in "true" fullscreen mode (where we switch display modes & forbid switching spaces or tabbing out) so that you won't see the rainbow artefact caused by being out-of-sync with WindowServer, only the tearing you'd expect when V-Sync is disabled. We'll chat with Apple about whether there is a way to avoid the rainbow artefact when switching spaces in Windowed Fullscreen with displaySync disabled.
#jira UE-50134
Change 3672314 by Daniel.Wright
User friendly message dialog for when a required key is missing from BaseLightmass.ini
Change 3672315 by Daniel.Wright
Assert on load when a uniform buffer struct goes missing, instead of a crash on save
Change 3672476 by Chris.Bunner
Removed duplicate material instance editor command binding that appeared in a task stream merge.
Change 3672626 by Mark.Satterthwaite
Move the ue4_stdlib.metal extensions to MetalRHI's Public header directory as it'll need to be available to both modules and that's easier to accomplish from here.
Change 3672643 by Mark.Satterthwaite
iOS compilation fixes.
Change 3672728 by Daniel.Wright
Fixed encoded HDR reflection captures
Change 3672753 by Jian.Ru
Fix texture swimming
#jira UE-49369
Change 3672815 by Daniel.Wright
Tooltip for build button explaining why it might be disabled
Change 3673350 by Rolando.Caloca
DR - vk - Do not reallocate memory every draw call
Change 3673501 by Rolando.Caloca
DR - vk - Remove more reallocations
Change 3673505 by Rolando.Caloca
DR - Remove global variable with semantic
Change 3673514 by Rolando.Caloca
DR - vk - compile fix
Change 3675899 by Chris.Bunner
Fixed support for editor-time transient parameter overrides. This happens when a compiled material's scalar or vector parameter is changed in value only, the active material resources should also update and be reverted when the material graph is closed. The code was incorrectly pulling base parameters from expressions instead of the actual uniform.
Change 3676843 by Arne.Schober
DR - UE-49473 - Fix Stateleak caused by custom drawer in the long for loop, where the depth stencil state might not be reset in a subsequent itteration of the loop.
Change 3678269 by Daniel.Wright
Fixed Encoded HDR reflection capture data getting the wrong Brightness applied when cooking
Change 3678543 by Daniel.Wright
MapBuildData now tosses the unneeded reflection capture format on load. Affects target platforms that require multiple formats at cook time.
Change 3679602 by Jian.Ru
Fix up mesh decal shader complexity view mode
#jira UE-50272
Change 3679959 by Chris.Bunner
Fixed logic on overriden vector parameter retrieval for material instances checking a function owned parameter.
#jira UE-50712
Change 3679998 by Daniel.Wright
Fixed crash when precomputing static visibility only
[CL 3680175 by Marcus Wassmer in Main branch]
2017-10-04 13:36:51 -04:00
}
2019-08-14 14:02:54 -04:00
2021-02-02 04:25:26 -04:00
const TRefCountPtr < FRDGPooledBuffer > & FSceneViewState : : FEyeAdaptationManager : : GetBuffer ( uint32 BufferIndex ) const
2020-02-12 13:27:19 -05:00
{
2021-11-18 14:37:34 -05:00
check ( 0 < = BufferIndex & & BufferIndex < NUM_BUFFERS ) ;
2020-09-24 00:43:27 -04:00
2021-02-02 04:25:26 -04:00
return ExposureBufferData [ BufferIndex ] ;
2020-09-24 00:43:27 -04:00
}
2021-02-02 04:25:26 -04:00
const TRefCountPtr < FRDGPooledBuffer > & FSceneViewState : : FEyeAdaptationManager : : GetOrCreateBuffer ( FRDGBuilder & GraphBuilder , uint32 BufferIndex )
2020-09-24 00:43:27 -04:00
{
2021-11-18 14:37:34 -05:00
check ( 0 < = BufferIndex & & BufferIndex < NUM_BUFFERS ) ;
2020-02-12 13:27:19 -05:00
// Create textures if needed.
2020-09-24 00:43:27 -04:00
if ( ! ExposureBufferData [ BufferIndex ] . IsValid ( ) )
2020-02-12 13:27:19 -05:00
{
2021-09-22 10:01:48 -04:00
FRDGBufferDesc RDGBufferDesc = FRDGBufferDesc : : CreateBufferDesc ( sizeof ( FVector4f ) , 1 ) ;
2021-02-02 04:25:26 -04:00
RDGBufferDesc . Usage | = BUF_SourceCopy ;
FRDGBufferRef RDGBuffer = GraphBuilder . CreateBuffer ( RDGBufferDesc , TEXT ( " EyeAdaptationBuffer " ) , ERDGBufferFlags : : MultiFrame ) ;
2020-02-12 13:27:19 -05:00
2021-04-06 11:45:09 -04:00
ExposureBufferData [ BufferIndex ] = GraphBuilder . ConvertToExternalBuffer ( RDGBuffer ) ;
2021-02-02 04:25:26 -04:00
2021-09-22 10:01:48 -04:00
FVector4f * BufferData = ( FVector4f * ) GraphBuilder . RHICmdList . LockBuffer ( ExposureBufferData [ BufferIndex ] - > GetRHI ( ) , 0 , sizeof ( FVector4f ) , RLM_WriteOnly ) ;
* BufferData = FVector4f ( 1.0f , 1.0f , 1.0f , 1.0f ) ;
2021-02-02 04:25:26 -04:00
GraphBuilder . RHICmdList . UnlockBuffer ( ExposureBufferData [ BufferIndex ] - > GetRHI ( ) ) ;
2020-02-12 13:27:19 -05:00
}
2021-02-02 04:25:26 -04:00
return ExposureBufferData [ BufferIndex ] ;
2020-02-12 13:27:19 -05:00
}
2021-11-18 14:37:34 -05:00
FRHIGPUBufferReadback * FSceneViewState : : FEyeAdaptationManager : : GetLatestReadbackBuffer ( )
2020-02-12 13:27:19 -05:00
{
2021-11-18 14:37:34 -05:00
FRHIGPUBufferReadback * LatestReadbackBuffer = nullptr ;
2020-02-12 13:27:19 -05:00
2021-11-18 14:37:34 -05:00
// Find latest buffer that is ready
while ( ReadbackBuffersNumPending > 0 )
{
2021-12-07 13:37:50 -05:00
uint32 Index = ( ReadbackBuffersWriteIndex + MAX_READBACK_BUFFERS - ReadbackBuffersNumPending ) % MAX_READBACK_BUFFERS ;
2021-11-18 14:37:34 -05:00
if ( ExposureReadbackBuffers [ Index ] - > IsReady ( ) )
{
- - ReadbackBuffersNumPending ;
LatestReadbackBuffer = ExposureReadbackBuffers [ Index ] ;
}
else
{
break ;
}
}
2020-09-24 00:43:27 -04:00
2021-11-18 14:37:34 -05:00
return LatestReadbackBuffer ;
}
2021-02-02 04:25:26 -04:00
2021-11-18 14:37:34 -05:00
void FSceneViewState : : FEyeAdaptationManager : : SwapBuffers ( )
{
CurrentBuffer = ( CurrentBuffer + 1 ) % NUM_BUFFERS ;
}
void FSceneViewState : : FEyeAdaptationManager : : UpdateLastExposureFromBuffer ( )
{
QUICK_SCOPE_CYCLE_COUNTER ( STAT_FEyeAdaptationRTManager_ReadbackLastExposure ) ;
// Get the most up to date value
FRHIGPUBufferReadback * ReadbackBuffer = GetLatestReadbackBuffer ( ) ;
if ( ReadbackBuffer )
{
// Read the last request results.
FVector4f * ReadbackData = ( FVector4f * ) ReadbackBuffer - > Lock ( sizeof ( FVector4f ) ) ;
if ( ReadbackData )
{
LastExposure = ReadbackData - > X ;
LastAverageSceneLuminance = ReadbackData - > Z ;
ReadbackBuffer - > Unlock ( ) ;
}
}
}
void FSceneViewState : : FEyeAdaptationManager : : EnqueueExposureBufferReadback ( FRDGBuilder & GraphBuilder )
{
check ( ExposureBufferData [ CurrentBuffer ] . IsValid ( ) ) ;
if ( ReadbackBuffersNumPending < MAX_READBACK_BUFFERS )
2020-02-12 13:27:19 -05:00
{
2021-02-02 04:25:26 -04:00
FRDGBufferRef CurrentRDGBuffer = GraphBuilder . RegisterExternalBuffer ( ExposureBufferData [ CurrentBuffer ] , ERDGBufferFlags : : MultiFrame ) ;
2021-11-18 14:37:34 -05:00
FRHIGPUBufferReadback * ExposureReadbackBuffer = ExposureReadbackBuffers [ ReadbackBuffersWriteIndex ] ;
2020-02-12 13:27:19 -05:00
2021-11-18 14:37:34 -05:00
if ( ExposureReadbackBuffer = = nullptr )
2020-09-24 00:43:27 -04:00
{
2021-05-04 07:16:55 -04:00
static const FName ExposureValueName ( TEXT ( " Scene view state exposure readback " ) ) ;
2021-11-18 14:37:34 -05:00
ExposureReadbackBuffer = new FRHIGPUBufferReadback ( ExposureValueName ) ;
ExposureReadbackBuffers [ ReadbackBuffersWriteIndex ] = ExposureReadbackBuffer ;
2020-02-12 13:27:19 -05:00
}
2021-05-04 07:16:55 -04:00
2021-11-18 14:37:34 -05:00
AddEnqueueCopyPass ( GraphBuilder , ExposureReadbackBuffer , CurrentRDGBuffer , 0 ) ;
2020-02-12 13:27:19 -05:00
2021-11-18 14:37:34 -05:00
ReadbackBuffersWriteIndex = ( ReadbackBuffersWriteIndex + 1 ) % MAX_READBACK_BUFFERS ;
ReadbackBuffersNumPending = FMath : : Min ( ReadbackBuffersNumPending + 1 , MAX_READBACK_BUFFERS ) ;
}
2020-02-12 13:27:19 -05:00
}
2019-08-14 14:02:54 -04:00
void FSceneViewState : : UpdatePreExposure ( FViewInfo & View )
{
const FSceneViewFamily & ViewFamily = * View . Family ;
// One could use the IsRichView functionality to check if we need to update pre-exposure,
// but this is too limiting for certain view. For instance shader preview doesn't have
// volumetric lighting enabled, which makes the view be flagged as rich, and not updating
// the pre-exposition value.
const bool bIsPreExposureRelevant =
ViewFamily . EngineShowFlags . EyeAdaptation & & // Controls whether scene luminance is computed at all.
ViewFamily . EngineShowFlags . Lighting & &
ViewFamily . EngineShowFlags . PostProcessing & &
ViewFamily . bResolveScene & &
! ViewFamily . EngineShowFlags . LightMapDensity & &
! ViewFamily . EngineShowFlags . StationaryLightOverlap & &
! ViewFamily . EngineShowFlags . LightComplexity & &
! ViewFamily . EngineShowFlags . LODColoration & &
! ViewFamily . EngineShowFlags . HLODColoration & &
2020-06-23 18:40:00 -04:00
! ViewFamily . EngineShowFlags . LevelColoration & &
2021-03-21 04:07:16 -04:00
( ( ! ViewFamily . EngineShowFlags . VisualizeBuffer ) | | View . CurrentBufferVisualizationMode ! = NAME_None ) & & // disable pre-exposure for the buffer visualization modes
2022-01-27 15:49:31 -05:00
( ( ! ViewFamily . EngineShowFlags . VisualizeNanite ) | | View . CurrentNaniteVisualizationMode ! = NAME_None ) & & // disable pre-exposure for the Nanite visualization modes
( ( ! ViewFamily . EngineShowFlags . VisualizeVirtualShadowMap ) | | View . CurrentVirtualShadowMapVisualizationMode ! = NAME_None ) ; // disable pre-exposure for the virtual shadow map visualization modes
2019-08-14 14:02:54 -04:00
PreExposure = 1.f ;
bUpdateLastExposure = false ;
2020-09-24 00:43:27 -04:00
bool bMobilePlatform = IsMobilePlatform ( View . GetShaderPlatform ( ) ) ;
bool bEnableAutoExposure = ! bMobilePlatform | | IsMobileEyeAdaptationEnabled ( View ) ;
2020-02-12 13:27:19 -05:00
if ( bIsPreExposureRelevant & & bEnableAutoExposure )
2019-08-14 14:02:54 -04:00
{
2021-04-21 04:17:42 -04:00
const float PreExposureOverride = CVarEyeAdaptationPreExposureOverride . GetValueOnRenderThread ( ) ;
const float LastExposure = View . GetLastEyeAdaptationExposure ( ) ;
if ( PreExposureOverride > 0 )
2019-08-14 14:02:54 -04:00
{
2021-04-21 04:17:42 -04:00
PreExposure = PreExposureOverride ;
2019-08-14 14:02:54 -04:00
}
2021-04-21 04:17:42 -04:00
else if ( LastExposure > 0 )
2019-08-14 14:02:54 -04:00
{
2021-04-21 04:17:42 -04:00
PreExposure = LastExposure ;
2019-08-14 14:02:54 -04:00
}
2020-09-24 00:43:27 -04:00
2021-04-21 04:17:42 -04:00
bUpdateLastExposure = true ;
2021-08-03 11:56:47 -04:00
}
2021-04-21 04:17:42 -04:00
2021-12-17 03:41:59 -05:00
// Mobile LDR does not support post-processing but still can apply Exposure during basepass
if ( bMobilePlatform & & ! IsMobileHDR ( ) )
{
PreExposure = GetEyeAdaptationFixedExposure ( View ) ;
}
2019-08-14 14:02:54 -04:00
// Update the pre-exposure value on the actual view
View . PreExposure = PreExposure ;
// Update the pre exposure of all temporal histories.
if ( ! View . bStatePrevViewInfoIsReadOnly )
{
PrevFrameViewInfo . SceneColorPreExposure = PreExposure ;
}
2020-06-23 18:40:00 -04:00
}
# if WITH_MGPU
static const FName NAME_EyeAdaptation ( TEXT ( " EyeAdaptation " ) ) ;
void FSceneViewState : : BroadcastEyeAdaptationTemporalEffect ( FRHICommandList & RHICmdList )
{
2022-04-06 18:24:24 -04:00
FRHITexture * EyeAdaptation = GetCurrentEyeAdaptationTexture ( RHICmdList ) - > GetRHI ( ) ;
2020-06-23 18:40:00 -04:00
RHICmdList . BroadcastTemporalEffect ( FName ( NAME_EyeAdaptation , UniqueID ) , { & EyeAdaptation , 1 } ) ;
}
DECLARE_GPU_STAT ( AFRWaitForEyeAdaptation ) ;
void FSceneViewState : : WaitForEyeAdaptationTemporalEffect ( FRHICommandList & RHICmdList )
{
SCOPED_GPU_STAT ( RHICmdList , AFRWaitForEyeAdaptation ) ;
RHICmdList . WaitForTemporalEffect ( FName ( NAME_EyeAdaptation , UniqueID ) ) ;
}
2021-12-07 13:37:50 -05:00
# endif // WITH_MGPU