Files
UnrealEngineUWP/Engine/Source/Runtime/Renderer/Private/PostProcess/PostProcessHMD.cpp

209 lines
7.1 KiB
C++
Raw Normal View History

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
/*=============================================================================
PostProcessHMD.cpp: Post processing for HMD devices.
=============================================================================*/
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/PostProcessHMD.h"
#include "EngineGlobals.h"
#include "Engine/Engine.h"
#include "IHeadMountedDisplay.h"
#include "SceneUtils.h"
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 "StaticBoundShaderState.h"
#include "SceneRenderTargetParameters.h"
#include "SceneRendering.h"
/** The filter vertex declaration resource type. */
class FDistortionVertexDeclaration : public FRenderResource
{
public:
FVertexDeclarationRHIRef VertexDeclarationRHI;
/** Destructor. */
virtual ~FDistortionVertexDeclaration() {}
virtual void InitRHI() override
{
uint16 Stride = sizeof(FDistortionVertex);
FVertexDeclarationElementList Elements;
Elements.Add(FVertexElement(0, STRUCT_OFFSET(FDistortionVertex, Position),VET_Float2,0, Stride));
Elements.Add(FVertexElement(0, STRUCT_OFFSET(FDistortionVertex, TexR), VET_Float2, 1, Stride));
Elements.Add(FVertexElement(0, STRUCT_OFFSET(FDistortionVertex, TexG), VET_Float2, 2, Stride));
Elements.Add(FVertexElement(0, STRUCT_OFFSET(FDistortionVertex, TexB), VET_Float2, 3, Stride));
Elements.Add(FVertexElement(0, STRUCT_OFFSET(FDistortionVertex, VignetteFactor), VET_Float1, 4, Stride));
Elements.Add(FVertexElement(0, STRUCT_OFFSET(FDistortionVertex, TimewarpFactor), VET_Float1, 5, Stride));
VertexDeclarationRHI = RHICreateVertexDeclaration(Elements);
}
virtual void ReleaseRHI() override
{
VertexDeclarationRHI.SafeRelease();
}
};
/** The Distortion vertex declaration. */
TGlobalResource<FDistortionVertexDeclaration> GDistortionVertexDeclaration;
/** Encapsulates the post processing vertex shader. */
class FPostProcessHMDVS : public FGlobalShader
{
DECLARE_SHADER_TYPE(FPostProcessHMDVS, Global);
// Distortion parameter values
FShaderParameter EyeToSrcUVScale;
FShaderParameter EyeToSrcUVOffset;
// Timewarp-related params
FShaderParameter EyeRotationStart;
FShaderParameter EyeRotationEnd;
static bool ShouldCache(EShaderPlatform Platform)
{
return true;
}
/** Default constructor. */
FPostProcessHMDVS() {}
public:
/** Initialization constructor. */
FPostProcessHMDVS(const ShaderMetaType::CompiledShaderInitializerType& Initializer)
: FGlobalShader(Initializer)
{
EyeToSrcUVScale.Bind(Initializer.ParameterMap, TEXT("EyeToSrcUVScale"));
EyeToSrcUVOffset.Bind(Initializer.ParameterMap, TEXT("EyeToSrcUVOffset"));
}
void SetVS(const FRenderingCompositePassContext& Context)
{
const FVertexShaderRHIParamRef ShaderRHI = GetVertexShader();
FGlobalShader::SetParameters(Context.RHICmdList, ShaderRHI, Context.View);
check(GEngine->HMDDevice.IsValid());
FVector2D EyeToSrcUVScaleValue;
FVector2D EyeToSrcUVOffsetValue;
GEngine->HMDDevice->GetEyeRenderParams_RenderThread(Context, EyeToSrcUVScaleValue, EyeToSrcUVOffsetValue);
SetShaderValue(Context.RHICmdList, ShaderRHI, EyeToSrcUVScale, EyeToSrcUVScaleValue);
SetShaderValue(Context.RHICmdList, ShaderRHI, EyeToSrcUVOffset, EyeToSrcUVOffsetValue);
}
// FShader interface.
virtual bool Serialize(FArchive& Ar) override
{
bool bShaderHasOutdatedParameters = FGlobalShader::Serialize(Ar);
Ar << EyeToSrcUVScale << EyeToSrcUVOffset;
return bShaderHasOutdatedParameters;
}
};
Copying //UE4/Dev-VR to //UE4/Dev-Main (Source: //UE4/Dev-VR @ 3056808) #lockdown Nick.Penwarden #rb The Forces of Good and Evil, twixt the realms from which bugs doth come ========================== MAJOR FEATURES + CHANGES ========================== Change 3026722 on 2016/06/24 by Chad.Taylor IStereoLayers SteamVR initial implementation Change 3027397 on 2016/06/24 by Chad.Taylor SteamVR stereo layer texture updating rework. It now upadtes textures from the render thread and supports "continous update" Change 3033004 on 2016/06/29 by Nick.Whiting Integrating GoogleVR plugin from Google branch Change 3033248 on 2016/06/29 by Sam.Zamani Copying //Tasks/UE4/Dev-VR-Online to Dev-VR (//UE4/Dev-VR) Merged up to cl #3029677 from //depot/Partners/Oculus/UE4-Research/4.12-dev/Engine/Source/Runtime/Online/... Added PacketHandler module dependency to new OnlineSubsystemOculus module Replaced std::move usage with UE equivalent MoveTemp Trigger OnLoginStatusChanged delegate during login/logout processing of FOnlineIdentityOculus Implemented Oculus unique net id creation from string and byte* Added OnlineSubsystemOculus module as a dependency for QAGame testing Make sure to always call completion delegates in FOnlineFriendsOculus Trigger success OnMatchmakingComplete delegate in FOnlineSessionOculus::StartMatchmaking Fixed shadowed variable PlayerId in FOnlineSessionOculus::OnRoomInviteAccepted Split out 32/64bit dll dependencies of LibOVRPlatform Replaced "unsigned long long" with UE equivalent "uint64" Replaced "unsigned int" with UE equivalent "uint32" Change 3033490 on 2016/06/29 by Jeff.Fisher UE-32601 Changed from Flush to FlushImmediate when switching from rendering one eye buffer to the other on GoogleVR because we are trying to clear the immediate RHI command list. Change 3034920 on 2016/06/30 by Chad.Taylor PSVR ApplyMorpheusReprojection support for separate texture per stereo eye. Change 3038640 on 2016/07/05 by Chad.Taylor Fixing Morpheus "HasValidTrackingPosition" to actually return true when tracking is valid. Change 3038940 on 2016/07/06 by Nick.Whiting Haptics Refactor: Adding support for multiple types of haptics effect, defined by their data format (curves, buffer, sound waves) Change 3040512 on 2016/07/06 by Chad.Taylor Fix for CopyOverOtherViewportsIfNeeded that was selecting an incorrect FSceneView. This was picking the wrong hmd mesh for render and causing strange flickering. Change 3041314 on 2016/07/07 by Nick.Whiting Extending core hand types for motion tracking controllers to have external camera tracking available, as well as Special_1 - 9 for systems like STEM that have multiple special packs. Change 3041353 on 2016/07/07 by Nick.Whiting Modifying SteamVR HMD detection check to use a lighter weight function that doesn't launch the compositor Change 3043516 on 2016/07/08 by Chad.Taylor PSVR A3D Sound fix Change 3043808 on 2016/07/08 by Nick.Whiting Fixing issue with SteamVR plugin starting while trying to detect connected HMDs, fix for editor quitting when VR Compositor quits Change 3043840 on 2016/07/09 by Nick.Whiting OSVR Updated plugin, from Sensics Change 3043958 on 2016/07/09 by Nick.Whiting Oculus 1.5 Support Integration Change 3045493 on 2016/07/11 by Ryan.Vance Copying //UE4/Dev-VR-InstancedStereo to Dev-VR-Minimal (//UE4/Dev-VR-Minimal) PS4 multi-view copy up Change 3046896 on 2016/07/12 by Ryan.Vance #jira UE-30842 We need to also late update ShadowViewMatrices, otherwise we compute an incorrect volume for translucent lighting which manifests as flickering. Note: I'm not bothering to check the r.Shadow.FreezeCamera cvar here, as debugging shadowing *in vr* is probably not a case we need to support. Change 3047272 on 2016/07/12 by Ryan.Vance #jira UE-30278 We need to forward the eye index interpolator along. Also removed a superfluous call to resolve view. Change 3048060 on 2016/07/13 by Nick.Whiting Integrating CL 3045721 from //depot/Partners/Google/AndroidVR-DevVR Upgrade Android and iOS GVR SDK to the latest. Fix the flipped vignette issue when using Unreal's post processing distortion. Change the Daydream & Cardboard mode to use scanline racing. Deprecate the ability to turn off individual UI elements. Change 3048151 on 2016/07/13 by Nick.Whiting Integrating small controller initialization fix from AndroidVR-DevVR branch Change 3048363 on 2016/07/13 by Ryan.Vance Fix for crash with HMDs when the adapter description isn't found. Crashing case was having monitors plugged into one adapter, and an HMD plugged into another, which caused a gap in AdapterDescription array, which later crashed in FindAdapter. Change 3048783 on 2016/07/13 by Chad.Taylor Fixing up SteamVR's -vr to mimic the same behavior as Oculus and use the appropriate resolution #jira UE-30173 Change 3049101 on 2016/07/13 by Chad.Taylor Part 2 of: Fixing up SteamVR's -vr to mimic the same behavior as Oculus and use the appropriate resolution. Had to defer setting of the viewport size to occur after we have a valid Window. #jira UE-30173 Change 3050707 on 2016/07/14 by Nick.Whiting Fix for motion controllers on remote clients responding to local motion controllers Change 3051043 on 2016/07/14 by Nick.Whiting Stub funcitonality to allow for rebasing based on other external trackers Change 3051882 on 2016/07/15 by Nick.Whiting Moving OnlineSubsystemOculus to a plugin, instead of a module Change 3053772 on 2016/07/18 by Chad.Taylor Code cleanup: Removing defunct IStereoRendering methods Change 3054515 on 2016/07/18 by Chad.Taylor Changing HMD resolution resizing to no longer occur in "Windowed" mode because its causing an issue in VR Preview #jira UE-33341 Change 3056435 on 2016/07/19 by Jeff.Fisher UES-2981 UEVR-13 Implemented VRHeadsetLost and VRHeadsetReconnected Delegates for Morpheus (Playstation VR). https://udn.unrealengine.com/questions/301886/trying-to-use-vrheadsetlost-and-vrheadsetreconnect.html #review-3056100 @nick.whiting Change 3056491 on 2016/07/19 by Chad.Taylor Audio thread assertion from HandlePause being called on the game thread. Submitting on behalf of Aaron McLeran #jira UE-33360 [CL 3057155 by Nick Whiting in Main branch]
2016-07-20 01:48:44 -04:00
IMPLEMENT_SHADER_TYPE(, FPostProcessHMDVS, TEXT("PostProcessHMD"), TEXT("MainVS"), SF_Vertex);
/** Encapsulates the post processing HMD distortion and correction pixel shader. */
class FPostProcessHMDPS : public FGlobalShader
{
DECLARE_SHADER_TYPE(FPostProcessHMDPS, Global);
static bool ShouldCache(EShaderPlatform Platform)
{
return true;
}
/** Default constructor. */
FPostProcessHMDPS() {}
public:
FPostProcessPassParameters PostprocessParameter;
FDeferredPixelShaderParameters DeferredParameters;
/** Initialization constructor. */
FPostProcessHMDPS(const ShaderMetaType::CompiledShaderInitializerType& Initializer)
: FGlobalShader(Initializer)
{
PostprocessParameter.Bind(Initializer.ParameterMap);
DeferredParameters.Bind(Initializer.ParameterMap);
}
void SetPS(const FRenderingCompositePassContext& Context, FIntRect SrcRect, FIntPoint SrcBufferSize, EStereoscopicPass StereoPass, FMatrix& QuadTexTransform)
{
const FPixelShaderRHIParamRef ShaderRHI = GetPixelShader();
FGlobalShader::SetParameters(Context.RHICmdList, ShaderRHI, Context.View);
PostprocessParameter.SetPS(ShaderRHI, Context, TStaticSamplerState<SF_Bilinear, AM_Clamp, AM_Clamp, AM_Clamp>::GetRHI());
DeferredParameters.Set(Context.RHICmdList, ShaderRHI, Context.View);
}
// FShader interface.
virtual bool Serialize(FArchive& Ar) override
{
bool bShaderHasOutdatedParameters = FGlobalShader::Serialize(Ar);
Ar << PostprocessParameter << DeferredParameters;
return bShaderHasOutdatedParameters;
}
};
Copying //UE4/Dev-VR to //UE4/Dev-Main (Source: //UE4/Dev-VR @ 3056808) #lockdown Nick.Penwarden #rb The Forces of Good and Evil, twixt the realms from which bugs doth come ========================== MAJOR FEATURES + CHANGES ========================== Change 3026722 on 2016/06/24 by Chad.Taylor IStereoLayers SteamVR initial implementation Change 3027397 on 2016/06/24 by Chad.Taylor SteamVR stereo layer texture updating rework. It now upadtes textures from the render thread and supports "continous update" Change 3033004 on 2016/06/29 by Nick.Whiting Integrating GoogleVR plugin from Google branch Change 3033248 on 2016/06/29 by Sam.Zamani Copying //Tasks/UE4/Dev-VR-Online to Dev-VR (//UE4/Dev-VR) Merged up to cl #3029677 from //depot/Partners/Oculus/UE4-Research/4.12-dev/Engine/Source/Runtime/Online/... Added PacketHandler module dependency to new OnlineSubsystemOculus module Replaced std::move usage with UE equivalent MoveTemp Trigger OnLoginStatusChanged delegate during login/logout processing of FOnlineIdentityOculus Implemented Oculus unique net id creation from string and byte* Added OnlineSubsystemOculus module as a dependency for QAGame testing Make sure to always call completion delegates in FOnlineFriendsOculus Trigger success OnMatchmakingComplete delegate in FOnlineSessionOculus::StartMatchmaking Fixed shadowed variable PlayerId in FOnlineSessionOculus::OnRoomInviteAccepted Split out 32/64bit dll dependencies of LibOVRPlatform Replaced "unsigned long long" with UE equivalent "uint64" Replaced "unsigned int" with UE equivalent "uint32" Change 3033490 on 2016/06/29 by Jeff.Fisher UE-32601 Changed from Flush to FlushImmediate when switching from rendering one eye buffer to the other on GoogleVR because we are trying to clear the immediate RHI command list. Change 3034920 on 2016/06/30 by Chad.Taylor PSVR ApplyMorpheusReprojection support for separate texture per stereo eye. Change 3038640 on 2016/07/05 by Chad.Taylor Fixing Morpheus "HasValidTrackingPosition" to actually return true when tracking is valid. Change 3038940 on 2016/07/06 by Nick.Whiting Haptics Refactor: Adding support for multiple types of haptics effect, defined by their data format (curves, buffer, sound waves) Change 3040512 on 2016/07/06 by Chad.Taylor Fix for CopyOverOtherViewportsIfNeeded that was selecting an incorrect FSceneView. This was picking the wrong hmd mesh for render and causing strange flickering. Change 3041314 on 2016/07/07 by Nick.Whiting Extending core hand types for motion tracking controllers to have external camera tracking available, as well as Special_1 - 9 for systems like STEM that have multiple special packs. Change 3041353 on 2016/07/07 by Nick.Whiting Modifying SteamVR HMD detection check to use a lighter weight function that doesn't launch the compositor Change 3043516 on 2016/07/08 by Chad.Taylor PSVR A3D Sound fix Change 3043808 on 2016/07/08 by Nick.Whiting Fixing issue with SteamVR plugin starting while trying to detect connected HMDs, fix for editor quitting when VR Compositor quits Change 3043840 on 2016/07/09 by Nick.Whiting OSVR Updated plugin, from Sensics Change 3043958 on 2016/07/09 by Nick.Whiting Oculus 1.5 Support Integration Change 3045493 on 2016/07/11 by Ryan.Vance Copying //UE4/Dev-VR-InstancedStereo to Dev-VR-Minimal (//UE4/Dev-VR-Minimal) PS4 multi-view copy up Change 3046896 on 2016/07/12 by Ryan.Vance #jira UE-30842 We need to also late update ShadowViewMatrices, otherwise we compute an incorrect volume for translucent lighting which manifests as flickering. Note: I'm not bothering to check the r.Shadow.FreezeCamera cvar here, as debugging shadowing *in vr* is probably not a case we need to support. Change 3047272 on 2016/07/12 by Ryan.Vance #jira UE-30278 We need to forward the eye index interpolator along. Also removed a superfluous call to resolve view. Change 3048060 on 2016/07/13 by Nick.Whiting Integrating CL 3045721 from //depot/Partners/Google/AndroidVR-DevVR Upgrade Android and iOS GVR SDK to the latest. Fix the flipped vignette issue when using Unreal's post processing distortion. Change the Daydream & Cardboard mode to use scanline racing. Deprecate the ability to turn off individual UI elements. Change 3048151 on 2016/07/13 by Nick.Whiting Integrating small controller initialization fix from AndroidVR-DevVR branch Change 3048363 on 2016/07/13 by Ryan.Vance Fix for crash with HMDs when the adapter description isn't found. Crashing case was having monitors plugged into one adapter, and an HMD plugged into another, which caused a gap in AdapterDescription array, which later crashed in FindAdapter. Change 3048783 on 2016/07/13 by Chad.Taylor Fixing up SteamVR's -vr to mimic the same behavior as Oculus and use the appropriate resolution #jira UE-30173 Change 3049101 on 2016/07/13 by Chad.Taylor Part 2 of: Fixing up SteamVR's -vr to mimic the same behavior as Oculus and use the appropriate resolution. Had to defer setting of the viewport size to occur after we have a valid Window. #jira UE-30173 Change 3050707 on 2016/07/14 by Nick.Whiting Fix for motion controllers on remote clients responding to local motion controllers Change 3051043 on 2016/07/14 by Nick.Whiting Stub funcitonality to allow for rebasing based on other external trackers Change 3051882 on 2016/07/15 by Nick.Whiting Moving OnlineSubsystemOculus to a plugin, instead of a module Change 3053772 on 2016/07/18 by Chad.Taylor Code cleanup: Removing defunct IStereoRendering methods Change 3054515 on 2016/07/18 by Chad.Taylor Changing HMD resolution resizing to no longer occur in "Windowed" mode because its causing an issue in VR Preview #jira UE-33341 Change 3056435 on 2016/07/19 by Jeff.Fisher UES-2981 UEVR-13 Implemented VRHeadsetLost and VRHeadsetReconnected Delegates for Morpheus (Playstation VR). https://udn.unrealengine.com/questions/301886/trying-to-use-vrheadsetlost-and-vrheadsetreconnect.html #review-3056100 @nick.whiting Change 3056491 on 2016/07/19 by Chad.Taylor Audio thread assertion from HandlePause being called on the game thread. Submitting on behalf of Aaron McLeran #jira UE-33360 [CL 3057155 by Nick Whiting in Main branch]
2016-07-20 01:48:44 -04:00
IMPLEMENT_SHADER_TYPE(, FPostProcessHMDPS, TEXT("PostProcessHMD"), TEXT("MainPS"), SF_Pixel);
void FRCPassPostProcessHMD::Process(FRenderingCompositePassContext& Context)
{
SCOPED_DRAW_EVENT(Context.RHICmdList, PostProcessHMD);
const FPooledRenderTargetDesc* InputDesc = GetInputDesc(ePId_Input0);
if(!InputDesc)
{
// input is not hooked up correctly
return;
}
const FSceneView& View = Context.View;
const FSceneViewFamily& ViewFamily = *(View.Family);
const FIntRect SrcRect = View.ViewRect;
const FIntRect DestRect = View.UnscaledViewRect;
const FIntPoint SrcSize = InputDesc->Extent;
const FSceneRenderTargetItem& DestRenderTarget = PassOutputs[0].RequestSurface(Context);
// Set the view family's render target/viewport.
SetRenderTarget(Context.RHICmdList, DestRenderTarget.TargetableTexture, FTextureRHIRef());
Context.SetViewportAndCallRHI(DestRect);
Copying //UE4/Dev-Rendering to //UE4/Dev-Main (Source: //UE4/Dev-Rendering @ 3249742) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3232283 on 2016/12/13 by Ben.Woodhouse D3D12 - downgrade root signature size warning to a log following a discussion with Microsoft. There's not much we can actually do about it, and it's not relevant to all hardware #jira UE-36999 Change 3232641 on 2016/12/13 by Mark.Satterthwaite - Eliminate redundant state changes in MetalRHI in the state cache. - Add a new debug level for setting buffers to nil prior to calls to set*Bytes so that the tool doesn't display incorrect data. - Make testing for validation & statistics features use the same EMetalFeatures API as everything else for consistency. - Cache the fallback depth-stencil texture in the state cache and ignore it for determining whether a pass can restart - if we are using this texture its contents are worthless anyway. Change 3232661 on 2016/12/13 by Mark.Satterthwaite Re-enable Metal SM5 & DFAO/DistanceFieldShadowing on Intel for 10.12.2 or later. Change 3232759 on 2016/12/13 by Ben.Woodhouse Fix memory leak on XB1 when calling GPURealloc with count of 0, suggested on UDN https://udn.unrealengine.com/questions/326660/gpurealloc-leak.html Change 3232803 on 2016/12/13 by Ben.Marsh Add UT to the populate DDC job, and cook UT and Fortnite for Mac as well. Change 3232836 on 2016/12/13 by Ben.Marsh Split cooks to populate DDC into separate nodes for each platform. May help to reduce number of timeouts on remote VMs. Change 3232974 on 2016/12/13 by Rolando.Caloca DR - Refactor common code to UWorld::RecreateScene #jira UE-36719 PR #2824 Change 3232976 on 2016/12/13 by Ben.Marsh Add missing dependency on tools node for Mac cooks. Need to compile SCW first. Change 3233289 on 2016/12/13 by Olaf.Piesche Fixing potentially broken spot/point light fade with old content; initialize new properties properly Change 3233811 on 2016/12/13 by Mark.Satterthwaite Fix compiling QA-Material tessellation shaders that don't need to emit from Hull or sample in Domain the HSOut buffer which was confusing MetalBackend. Change 3233854 on 2016/12/13 by Mark.Satterthwaite More information about texture type validation errors in Metal. Change 3234650 on 2016/12/14 by Rolando.Caloca DR - vk - Fix bad aspect on depth cubemaps Change 3234651 on 2016/12/14 by Rolando.Caloca DR - vk - Fix for 32 bit crash on dump layer Change 3234813 on 2016/12/14 by Guillaume.Abadie Fixes texture mask static lighting when using GBuffer selective outputs. #jira UE-39527 Change 3235047 on 2016/12/14 by Uriel.Doyon Refactored HLOD texture streaming strategy to separate forced load from visibility. Added an incremental update in the last stage of the texture streaming update load to clear any pending work. Added an option "All" to the "BuildMateriaTexturelStreamingData" command to force rebuild everything. Change 3235317 on 2016/12/14 by Uriel.Doyon Removed timed primitives in the texture streaming since it was not used and there is now a fallback implementation in UPrimitiveComponent::GetStreamingTextureInfo. Change 3235431 on 2016/12/14 by Rolando.Caloca DR - Fix for Vulkan drawing black Change 3236788 on 2016/12/15 by Mark.Satterthwaite Fix 10.11.6 support (aka -nometalv2): the stencil view workaround necessitates a mid-render blit and the way things were setup resulted in the HasValidRenderTargets assert firing. Refactored the code to separate the concept or valid render-states in the cache from active render-states in the render-pass. Now it works as intended and will be needed for 4.15. Change 3236850 on 2016/12/15 by Mark.Satterthwaite Make changing the Metal Shader Version project setting prompt the user to restart for the changes to take effect. #jira UE-39801 Change 3237002 on 2016/12/15 by Benjamin.Hyder submitting updated TM-Shadermodels map Change 3237312 on 2016/12/15 by Rolando.Caloca DR - Change more macros to lambdas Change 3237394 on 2016/12/15 by Mark.Satterthwaite Add Metal-specific permutations of TBasePassHS - they affect the C++ definition on all platforms but are only cached or used on Metal - because the way we compile the combined VS+HS tessellation stage requires that the combined VS + HS HLSL code references the same resources, otherwise we get incorrect resouce bindings and subsequently fail to render properly. Long-term the Metal tessellation code will need to be refactored so that the vertex shader stage is emitted as a separate shader from the hull shader stage as this but will keep cropping back up and continue to complicate the engine. #jira UE-39799 Change 3237490 on 2016/12/15 by Daniel.Wright Fixed ULandscapeComponent::GetUsedMaterials Change 3237597 on 2016/12/15 by Ben.Woodhouse Disable timestamp queries on pre-Maxwell nvidia hardware. Local testing suggests that this is the major cause of instability in the UE4.14 release. It's possible that we could be more targeted by only excluding Fermi and older hardware, but identifying fermi hardware by device ID is difficult in practice, since the range overlaps with Kepler. Change 3237654 on 2016/12/15 by Daniel.Wright Non-editor compile fix Change 3238229 on 2016/12/16 by Rolando.Caloca DR - Remove ExcludeRect from inner RHI Clear methods; ensure will happen if trying to use it Change 3238236 on 2016/12/16 by Rolando.Caloca DR - Compile fixes Change 3238280 on 2016/12/16 by Marc.Olano Small optimization to Lanczos-3 upsample shader code. Change 3238321 on 2016/12/16 by Rolando.Caloca DR - Compile fix Change 3238331 on 2016/12/16 by Rolando.Caloca DR - compile fix Change 3238495 on 2016/12/16 by Marc.Olano Replace TEA random number generator with PCG. Was only used in #if-disabled reference rendering, but ldoes make better quality reference rendering when enabled. Change 3238496 on 2016/12/16 by Marc.Olano Tone mapping fix for OR-31752, cherry picked from Orion 3208273 Assumption that green is approximates luminance fails on red/blue HDR content, resulting in ugly black artifacts. Go back to luminance. Change 3238520 on 2016/12/16 by Rolando.Caloca DR - CIS Fix Change 3238571 on 2016/12/16 by Rolando.Caloca DR - CIS fix Change 3238605 on 2016/12/16 by Daniel.Wright Sharing IndirectLightingCacheTextureSampler samplers Change 3238626 on 2016/12/16 by Daniel.Wright Ray Traced Distance Field Shadow optimizations * Tighter light space tile culling * Skip ray marching pixels before the RTDF cascade near distance, or further than the cascade far distance * Depth bounds test on upsample * Created FLightTileIntersectionParameters for encapsulation of light tile culling functionality * RTDF shadow time went from 1.8ms -> .8ms and 3.1ms -> 1.2ms in FortGPUTestbed on 7870 with these changes Change 3238652 on 2016/12/16 by Rolando.Caloca DR - RHI clear methods no longer have an ExcludeRect, use DrawClearQuad functions instead Change 3238855 on 2016/12/16 by Rolando.Caloca DR - Added FRHITexture2D GetSizeXY Change 3238881 on 2016/12/16 by Rolando.Caloca DR - CIS fix Change 3239008 on 2016/12/16 by Arne.Schober DR - Fixing accidently returning a stackpointer in EnqueueRenderCommands Change 3239012 on 2016/12/16 by Arne.Schober DR - missing file Change 3239255 on 2016/12/17 by Rolando.Caloca DR - Remove shader clears from D3D11 Change 3239690 on 2016/12/19 by Rolando.Caloca DR - vk - Misc fixes from 1.0.37.00 SDK warnings Change 3239964 on 2016/12/19 by Rolando.Caloca DR - Fix click on editor not showing selected Change 3239995 on 2016/12/19 by Rolando.Caloca DR - Enable dist field on GL4 & Vulkan SM5 Change 3240162 on 2016/12/19 by Daniel.Wright Added EnableDepthBoundsTest / DisableDepthBoundsTest to RHIUtilites to share some common code Change 3240163 on 2016/12/19 by Daniel.Wright Distance field self shadowing controls for hiding world position offset self-shadow artifacts * Removed static mesh build settings DistanceFieldBias, which shrunk the distance field, breaking AO and shadows * Added DistanceFieldSelfShadowBias, which prevents occlusion close to the surface only, maintaining shadows on the ground and AO on the ground Change 3240271 on 2016/12/19 by Daniel.Wright Use 16 bit indices for distance field objects culled to tiles, when 16 bit will be enough. Saves 10mb of tile culling buffers. Change 3240282 on 2016/12/19 by Rolando.Caloca DR - Proper fix for hit proxies clear - Added missing stencil ref to DrawClearQuad Change 3240316 on 2016/12/19 by Rolando.Caloca DR - vk - Fixed some new 1.0.37.0 warnings Change 3240354 on 2016/12/19 by Rolando.Caloca DR - Dev shaders on sm4/5 Change 3240759 on 2016/12/20 by Rolando.Caloca DR - Fix bad crc on GL element declarations Change 3240895 on 2016/12/20 by Rolando.Caloca DR - vk - Swapchain fixes Change 3241057 on 2016/12/20 by Rolando.Caloca DR - vk - Fix resize on desktop Change 3241112 on 2016/12/20 by Rolando.Caloca DR - vk - Fix 1.0.37.0 warnings - Ignore some warnings we know we can't fix Change 3241310 on 2016/12/20 by Rolando.Caloca DR - vk - Fix crash Change 3241417 on 2016/12/20 by Daniel.Wright [Copy] Fixed race condition with FPrecomputedLightVolume::Data which was exposed when switching lighting scenarios Change 3241990 on 2016/12/21 by Daniel.Wright Converted DistanceFieldVolume data to BulkData * FDistanceFieldVolumeData Serialize time from .7s on PS4 to 0s Change 3242005 on 2016/12/21 by Daniel.Wright Removed unused !USE_DEPTH_RANGE_LISTS path to reduce complexity Change 3242295 on 2016/12/21 by Bob.Tellez Duplicating CL#3242294 from //Fortnite/Main #UE4 Re-applying the fix for rendering editor primitives when r.EarlyZPassOnlyMaterialMasking is enabled Change 3242487 on 2016/12/21 by Marcus.Wassmer Fix typo Change 3243091 on 2016/12/22 by Daniel.Wright Fixed too many groups dispatched for TConeTraceScreenGridGlobalOcclusionCS Change 3243161 on 2016/12/22 by Uriel.Doyon New async tasks for the streaming update. Optimizing the biggest frame cost. Change 3243179 on 2016/12/22 by Uriel.Doyon Fixed possible invalid access from the async FNormalizeLightmapTexelFactorTask Change 3243236 on 2016/12/22 by Daniel.Wright Fixed DFAO bilateral upsample * Depth buffer was being unbound due to lack of DepthRead_StencilNop Change 3243452 on 2016/12/23 by Ben.Woodhouse Bring back 1024 render query limit workaround on D3D12 which was lost during the merge from partners #jira UE-35247 Change 3243512 on 2016/12/23 by Uriel.Doyon Improved task system for texture streaming. Change 3243742 on 2016/12/26 by Rolando.Caloca DR - vk - Fix UAV clears - Removed old validation layer - Print found device layers Change 3243745 on 2016/12/27 by Rolando.Caloca DR - vk - Fix for texture cube arrays - Warning for ClearUAVs Change 3243762 on 2016/12/27 by Rolando.Caloca DR - vk - Always use pipeline cache Change 3244450 on 2016/12/31 by Rolando.Caloca DR - vk - Pre reqs for separate transfer queue Change 3244453 on 2016/12/31 by Rolando.Caloca DR - vk - Win32 compile fix Change 3244756 on 2017/01/03 by Marcus.Wassmer Copying //Tasks/UE4/Dev-Niagara@3244743 to Dev-Rendering (//UE4/Dev-Rendering) Change 3244757 on 2017/01/03 by Marcus.Wassmer Niagara is still experimental in non-task branches. Change 3245059 on 2017/01/03 by Benjamin.Hyder Submitting TM-TrigNodes map Change 3245500 on 2017/01/03 by Olaf.Piesche Compile fix #1 for post-merge problems Change 3245572 on 2017/01/03 by Olaf.Piesche (Speculative) fix #2 for post-merge build problem. Hopefully fixes public distribution level error for cross compiler tool. Change 3245683 on 2017/01/03 by Marcus.Wassmer Fix some niagara warnings Change 3245732 on 2017/01/03 by Marcus.Wassmer Fix Niagara compile on clang platforms. Fix a few warnings / static analysis things as well. Change 3246403 on 2017/01/04 by Rolando.Caloca DR - vk - Fix bogus warning Change 3246432 on 2017/01/04 by Marcus.Wassmer Copying //Tasks/UE4/Dev-Niagara@3246424 to Dev-Rendering (//UE4/Dev-Rendering) Change 3246538 on 2017/01/04 by Rolando.Caloca DR - vk - Show hitch time for compute psos Change 3246580 on 2017/01/04 by Rolando.Caloca DR - vk - compile fix Change 3246610 on 2017/01/04 by Rolando.Caloca DR - Compute PSO pre reqs Change 3246707 on 2017/01/04 by Marcus.Wassmer Add missing integer operations to UnrealMathDirectX.h Change 3246786 on 2017/01/04 by Marcus.Wassmer Avoid public dependency build errors. Should probably just remove the DDCUtils module instead Change 3246828 on 2017/01/04 by Olaf.Piesche UE-39249; need to check the view as well as the view family in CheckAndUpdateLastFrame; scene captures use a different family, but each eye for VR uses a different scene view. Change 3247026 on 2017/01/04 by Rolando.Caloca DR - Remove CrossCompilerTool as it's not required anymore Change 3247086 on 2017/01/04 by Marcus.Wassmer Remove includes for Core.h monolithic header Change 3247227 on 2017/01/04 by Marcus.Wassmer Fix typo and compile errors. Change 3247228 on 2017/01/04 by Marcus.Wassmer Use crossplatform intrinsics Change 3247229 on 2017/01/04 by Marcus.Wassmer Implement missing integer NEON operations. Change NEON vectorint to match name and sign from other platforms Change 3247245 on 2017/01/04 by Marcus.Wassmer Fixing various warnings/errors from clang platforms (Mac/Linux) Change 3247331 on 2017/01/04 by Marcus.Wassmer More Mac/clang fixes Change 3247958 on 2017/01/05 by Marcus.Wassmer VectorInt < - > Float ops should be conversions not reinterpret cast Change 3247959 on 2017/01/05 by Marcus.Wassmer Add missing ops to non-vector header Change 3247964 on 2017/01/05 by Rolando.Caloca DR - Temp fix for crash #jira UE-40211 Change 3248067 on 2017/01/05 by Rolando.Caloca DR - Static analysis fixes #jira UE-40167 Change 3248284 on 2017/01/05 by Rolando.Caloca DR - Linuix Compile fix #jira UE-40260 Change 3248288 on 2017/01/05 by Rolando.Caloca DR - Linux compile fix #jira UE-40264 Change 3248399 on 2017/01/05 by Brian.Karis Filtered importance sampling for envmap prefiltering. Fixed SSR on clearcoat with skylight only. Change 3248503 on 2017/01/05 by Rolando.Caloca DR - Linux fixes #jira UE-40264 Change 3248666 on 2017/01/05 by Brian.Karis Fix GL compile error Change 3248740 on 2017/01/05 by Marcus.Wassmer Fix linux and clang errors/warnings Change 3248851 on 2017/01/05 by Marcus.Wassmer Simplest fix for ES2 compile errors Change 3249217 on 2017/01/06 by Simon.Tovey Speculative fix for static analysis warning Change 3249296 on 2017/01/06 by Ben.Woodhouse XB1/Fast semantics: Add missing L1/L2 cache flush on transition to readable (or RW). The missing cache flush was causing indeterminism when reading from a texture shortly after writing to it as a render target. This fixes bloom and diffuse irradiance issues The bug has been there for a while, but CL 3227787 (drawclear early out) caused it to manifest #jira UE-39727 #jira UE-40238 Change 3249300 on 2017/01/06 by Ben.Woodhouse Remove workaround for diffuse irradiance (redundant clear). No longer necessary with CL 3249296 Change 3249387 on 2017/01/06 by Rolando.Caloca DR - Fix GL clear issues #jira UE-40254 Change 3249435 on 2017/01/06 by Ben.Woodhouse Duplicated from UT CL 3238664 Fix dbuffer decal rendering issues in fullscreen on PC. Also fixes crash in editor when viewing dbuffer materials. Pass clearcolor in RT params for system textures to workaround a bug with ClearColorTexture not working in fullscreen mode on DX11. Make sure dbuffer targets are bound if we're rendering mesh decals #jira UT-6891 #jira UE-39842 Change 3249721 on 2017/01/06 by Marcus.Wassmer Remove final references to non-existent Niagara data Change 3249742 on 2017/01/06 by Marcus.Wassmer Fix missing GPU particles on Mac. Pointers getting reused is causing the blendstate equality operator to fail. Simple workaround until we have time for a proper fix. [CL 3249983 by Marcus Wassmer in Main branch]
2017-01-06 17:51:46 -05:00
Context.RHICmdList.ClearColorTexture(DestRenderTarget.TargetableTexture, FLinearColor::Black);
// set the state
Context.RHICmdList.SetBlendState(TStaticBlendState<>::GetRHI());
Context.RHICmdList.SetRasterizerState(TStaticRasterizerState<>::GetRHI());
Context.RHICmdList.SetDepthStencilState(TStaticDepthStencilState<false, CF_Always>::GetRHI());
FMatrix QuadTexTransform = FMatrix::Identity;
FMatrix QuadPosTransform = FMatrix::Identity;
check(GEngine->HMDDevice.IsValid());
{
Copying //UE4/Dev-VR to //UE4/Dev-Main (Source: //UE4/Dev-VR @ 3056808) #lockdown Nick.Penwarden #rb The Forces of Good and Evil, twixt the realms from which bugs doth come ========================== MAJOR FEATURES + CHANGES ========================== Change 3026722 on 2016/06/24 by Chad.Taylor IStereoLayers SteamVR initial implementation Change 3027397 on 2016/06/24 by Chad.Taylor SteamVR stereo layer texture updating rework. It now upadtes textures from the render thread and supports "continous update" Change 3033004 on 2016/06/29 by Nick.Whiting Integrating GoogleVR plugin from Google branch Change 3033248 on 2016/06/29 by Sam.Zamani Copying //Tasks/UE4/Dev-VR-Online to Dev-VR (//UE4/Dev-VR) Merged up to cl #3029677 from //depot/Partners/Oculus/UE4-Research/4.12-dev/Engine/Source/Runtime/Online/... Added PacketHandler module dependency to new OnlineSubsystemOculus module Replaced std::move usage with UE equivalent MoveTemp Trigger OnLoginStatusChanged delegate during login/logout processing of FOnlineIdentityOculus Implemented Oculus unique net id creation from string and byte* Added OnlineSubsystemOculus module as a dependency for QAGame testing Make sure to always call completion delegates in FOnlineFriendsOculus Trigger success OnMatchmakingComplete delegate in FOnlineSessionOculus::StartMatchmaking Fixed shadowed variable PlayerId in FOnlineSessionOculus::OnRoomInviteAccepted Split out 32/64bit dll dependencies of LibOVRPlatform Replaced "unsigned long long" with UE equivalent "uint64" Replaced "unsigned int" with UE equivalent "uint32" Change 3033490 on 2016/06/29 by Jeff.Fisher UE-32601 Changed from Flush to FlushImmediate when switching from rendering one eye buffer to the other on GoogleVR because we are trying to clear the immediate RHI command list. Change 3034920 on 2016/06/30 by Chad.Taylor PSVR ApplyMorpheusReprojection support for separate texture per stereo eye. Change 3038640 on 2016/07/05 by Chad.Taylor Fixing Morpheus "HasValidTrackingPosition" to actually return true when tracking is valid. Change 3038940 on 2016/07/06 by Nick.Whiting Haptics Refactor: Adding support for multiple types of haptics effect, defined by their data format (curves, buffer, sound waves) Change 3040512 on 2016/07/06 by Chad.Taylor Fix for CopyOverOtherViewportsIfNeeded that was selecting an incorrect FSceneView. This was picking the wrong hmd mesh for render and causing strange flickering. Change 3041314 on 2016/07/07 by Nick.Whiting Extending core hand types for motion tracking controllers to have external camera tracking available, as well as Special_1 - 9 for systems like STEM that have multiple special packs. Change 3041353 on 2016/07/07 by Nick.Whiting Modifying SteamVR HMD detection check to use a lighter weight function that doesn't launch the compositor Change 3043516 on 2016/07/08 by Chad.Taylor PSVR A3D Sound fix Change 3043808 on 2016/07/08 by Nick.Whiting Fixing issue with SteamVR plugin starting while trying to detect connected HMDs, fix for editor quitting when VR Compositor quits Change 3043840 on 2016/07/09 by Nick.Whiting OSVR Updated plugin, from Sensics Change 3043958 on 2016/07/09 by Nick.Whiting Oculus 1.5 Support Integration Change 3045493 on 2016/07/11 by Ryan.Vance Copying //UE4/Dev-VR-InstancedStereo to Dev-VR-Minimal (//UE4/Dev-VR-Minimal) PS4 multi-view copy up Change 3046896 on 2016/07/12 by Ryan.Vance #jira UE-30842 We need to also late update ShadowViewMatrices, otherwise we compute an incorrect volume for translucent lighting which manifests as flickering. Note: I'm not bothering to check the r.Shadow.FreezeCamera cvar here, as debugging shadowing *in vr* is probably not a case we need to support. Change 3047272 on 2016/07/12 by Ryan.Vance #jira UE-30278 We need to forward the eye index interpolator along. Also removed a superfluous call to resolve view. Change 3048060 on 2016/07/13 by Nick.Whiting Integrating CL 3045721 from //depot/Partners/Google/AndroidVR-DevVR Upgrade Android and iOS GVR SDK to the latest. Fix the flipped vignette issue when using Unreal's post processing distortion. Change the Daydream & Cardboard mode to use scanline racing. Deprecate the ability to turn off individual UI elements. Change 3048151 on 2016/07/13 by Nick.Whiting Integrating small controller initialization fix from AndroidVR-DevVR branch Change 3048363 on 2016/07/13 by Ryan.Vance Fix for crash with HMDs when the adapter description isn't found. Crashing case was having monitors plugged into one adapter, and an HMD plugged into another, which caused a gap in AdapterDescription array, which later crashed in FindAdapter. Change 3048783 on 2016/07/13 by Chad.Taylor Fixing up SteamVR's -vr to mimic the same behavior as Oculus and use the appropriate resolution #jira UE-30173 Change 3049101 on 2016/07/13 by Chad.Taylor Part 2 of: Fixing up SteamVR's -vr to mimic the same behavior as Oculus and use the appropriate resolution. Had to defer setting of the viewport size to occur after we have a valid Window. #jira UE-30173 Change 3050707 on 2016/07/14 by Nick.Whiting Fix for motion controllers on remote clients responding to local motion controllers Change 3051043 on 2016/07/14 by Nick.Whiting Stub funcitonality to allow for rebasing based on other external trackers Change 3051882 on 2016/07/15 by Nick.Whiting Moving OnlineSubsystemOculus to a plugin, instead of a module Change 3053772 on 2016/07/18 by Chad.Taylor Code cleanup: Removing defunct IStereoRendering methods Change 3054515 on 2016/07/18 by Chad.Taylor Changing HMD resolution resizing to no longer occur in "Windowed" mode because its causing an issue in VR Preview #jira UE-33341 Change 3056435 on 2016/07/19 by Jeff.Fisher UES-2981 UEVR-13 Implemented VRHeadsetLost and VRHeadsetReconnected Delegates for Morpheus (Playstation VR). https://udn.unrealengine.com/questions/301886/trying-to-use-vrheadsetlost-and-vrheadsetreconnect.html #review-3056100 @nick.whiting Change 3056491 on 2016/07/19 by Chad.Taylor Audio thread assertion from HandlePause being called on the game thread. Submitting on behalf of Aaron McLeran #jira UE-33360 [CL 3057155 by Nick Whiting in Main branch]
2016-07-20 01:48:44 -04:00
TShaderMapRef<FPostProcessHMDVS> VertexShader(Context.GetShaderMap());
TShaderMapRef<FPostProcessHMDPS> PixelShader(Context.GetShaderMap());
static FGlobalBoundShaderState BoundShaderState;
SetGlobalBoundShaderState(Context.RHICmdList, Context.GetFeatureLevel(), BoundShaderState, GDistortionVertexDeclaration.VertexDeclarationRHI, *VertexShader, *PixelShader);
VertexShader->SetVS(Context);
PixelShader->SetPS(Context, SrcRect, SrcSize, View.StereoPass, QuadTexTransform);
}
GEngine->HMDDevice->DrawDistortionMesh_RenderThread(Context, SrcSize);
Context.RHICmdList.CopyToResolveTarget(DestRenderTarget.TargetableTexture, DestRenderTarget.ShaderResourceTexture, false, FResolveParams());
}
FPooledRenderTargetDesc FRCPassPostProcessHMD::ComputeOutputDesc(EPassOutputId InPassOutputId) const
{
FPooledRenderTargetDesc Ret = PassOutputs[0].RenderTargetDesc;
Ret.Reset();
Ret.DebugName = TEXT("HMD");
return Ret;
}