Browse Source

Check for HDR when selecting RT formats for opaque-only and final output.

This makes for fewer assumptions and should provide better support for HDR render paths.
mac-autoexp
Nico de Poel 3 years ago
parent
commit
bcfb4b6769
  1. 2
      Assets/Scenes/SampleScene.unity
  2. 6
      Assets/Scripts/Fsr2Controller.cs

2
Assets/Scenes/SampleScene.unity

@ -282,7 +282,7 @@ Camera:
m_TargetTexture: {fileID: 0} m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0 m_TargetDisplay: 0
m_TargetEye: 3 m_TargetEye: 3
m_HDR: 0
m_HDR: 1
m_AllowMSAA: 0 m_AllowMSAA: 0
m_AllowDynamicResolution: 0 m_AllowDynamicResolution: 0
m_ForceIntoRT: 0 m_ForceIntoRT: 0

6
Assets/Scripts/Fsr2Controller.cs

@ -62,6 +62,8 @@ namespace FidelityFX
private CommandBuffer _dispatchCommandBuffer; private CommandBuffer _dispatchCommandBuffer;
private CommandBuffer _opaqueInputCommandBuffer; private CommandBuffer _opaqueInputCommandBuffer;
private CommandBuffer _inputsCommandBuffer; private CommandBuffer _inputsCommandBuffer;
private RenderTextureFormat DefaultFormat => _renderCamera.allowHDR ? RenderTextureFormat.DefaultHDR : RenderTextureFormat.Default;
private void OnEnable() private void OnEnable()
{ {
@ -88,7 +90,7 @@ namespace FidelityFX
// Create command buffers to bind the camera's output at the right moments in the render loop // Create command buffers to bind the camera's output at the right moments in the render loop
_opaqueInputCommandBuffer = new CommandBuffer { name = "FSR2 Opaque Input" }; _opaqueInputCommandBuffer = new CommandBuffer { name = "FSR2 Opaque Input" };
_opaqueInputCommandBuffer.GetTemporaryRT(Fsr2Pipeline.SrvOpaqueOnly, _renderSize.x, _renderSize.y, 0, default, RenderTextureFormat.ARGBHalf);
_opaqueInputCommandBuffer.GetTemporaryRT(Fsr2Pipeline.SrvOpaqueOnly, _renderSize.x, _renderSize.y, 0, default, DefaultFormat);
_opaqueInputCommandBuffer.Blit(BuiltinRenderTextureType.CameraTarget, Fsr2Pipeline.SrvOpaqueOnly); _opaqueInputCommandBuffer.Blit(BuiltinRenderTextureType.CameraTarget, Fsr2Pipeline.SrvOpaqueOnly);
_inputsCommandBuffer = new CommandBuffer { name = "FSR2 Inputs" }; _inputsCommandBuffer = new CommandBuffer { name = "FSR2 Inputs" };
@ -268,7 +270,7 @@ namespace FidelityFX
} }
// We are rendering to the backbuffer, so we need a temporary render texture for FSR2 to output to // We are rendering to the backbuffer, so we need a temporary render texture for FSR2 to output to
_dispatchCommandBuffer.GetTemporaryRT(Fsr2Pipeline.UavUpscaledOutput, _displaySize.x, _displaySize.y, 0, default, GraphicsFormat.R16G16B16A16_SFloat, 1, true);
_dispatchCommandBuffer.GetTemporaryRT(Fsr2Pipeline.UavUpscaledOutput, _displaySize.x, _displaySize.y, 0, default, DefaultFormat, default, 1, true);
_context.Dispatch(_dispatchDescription, _dispatchCommandBuffer); _context.Dispatch(_dispatchDescription, _dispatchCommandBuffer);

Loading…
Cancel
Save