|
|
|
@ -121,7 +121,8 @@ namespace UnityEngine.Rendering.HighDefinition.AMD.FSR3 |
|
|
|
private FSR2CommandExecutionData _executeData; |
|
|
|
public override ref FSR2CommandExecutionData executeData => ref _executeData; |
|
|
|
|
|
|
|
private readonly Fsr3UpscalerContext _context = new Fsr3UpscalerContext(); |
|
|
|
private readonly Fsr3UpscalerContext _context = new(); |
|
|
|
private readonly Fsr3Upscaler.DispatchDescription _dispatchDescription = new(); |
|
|
|
|
|
|
|
internal void Init(in FSR2CommandInitializationData initSettings, Fsr3UpscalerAssets assets) |
|
|
|
{ |
|
|
|
@ -136,6 +137,8 @@ namespace UnityEngine.Rendering.HighDefinition.AMD.FSR3 |
|
|
|
if (initSettings.GetFlag(FfxFsr2InitializationFlags.EnableAutoExposure)) flags |= Fsr3Upscaler.InitializationFlags.EnableAutoExposure; |
|
|
|
if (initSettings.GetFlag(FfxFsr2InitializationFlags.EnableDynamicResolution)) flags |= Fsr3Upscaler.InitializationFlags.EnableDynamicResolution; |
|
|
|
|
|
|
|
//Debug.Log($"Initializing FSR3 with max render size: {initSettings.maxRenderSizeWidth}x{initSettings.maxRenderSizeHeight}, display size: {initSettings.displaySizeWidth}x{initSettings.displaySizeHeight}, flags: {flags}");
|
|
|
|
|
|
|
|
_context.Create(new Fsr3Upscaler.ContextDescription |
|
|
|
{ |
|
|
|
DisplaySize = new Vector2Int((int)initSettings.displaySizeWidth, (int)initSettings.displaySizeHeight), |
|
|
|
@ -155,32 +158,29 @@ namespace UnityEngine.Rendering.HighDefinition.AMD.FSR3 |
|
|
|
|
|
|
|
internal void Draw(CommandBuffer cmd, in FSR2TextureTable textures) |
|
|
|
{ |
|
|
|
var dispatchDescription = new Fsr3Upscaler.DispatchDescription |
|
|
|
{ |
|
|
|
Color = new ResourceView(textures.colorInput), |
|
|
|
Depth = new ResourceView(textures.depth), |
|
|
|
MotionVectors = new ResourceView(textures.motionVectors), |
|
|
|
Exposure = new ResourceView(textures.exposureTexture), |
|
|
|
Reactive = new ResourceView(textures.biasColorMask), |
|
|
|
TransparencyAndComposition = new ResourceView(textures.transparencyMask), |
|
|
|
Output = new ResourceView(textures.colorOutput), |
|
|
|
|
|
|
|
JitterOffset = new Vector2(_executeData.jitterOffsetX, _executeData.jitterOffsetY), |
|
|
|
MotionVectorScale = new Vector2(_executeData.MVScaleX, _executeData.MVScaleY), |
|
|
|
RenderSize = new Vector2Int((int)_executeData.renderSizeWidth, (int)_executeData.renderSizeHeight), |
|
|
|
InputResourceSize = new Vector2Int((int)_executeData.renderSizeWidth, (int)_executeData.renderSizeHeight), |
|
|
|
EnableSharpening = _executeData.enableSharpening != 0, |
|
|
|
Sharpness = _executeData.sharpness, |
|
|
|
FrameTimeDelta = _executeData.frameTimeDelta / 1000f, |
|
|
|
PreExposure = _executeData.preExposure, |
|
|
|
Reset = _executeData.reset != 0, |
|
|
|
CameraNear = _executeData.cameraNear, |
|
|
|
CameraFar = _executeData.cameraFar, |
|
|
|
CameraFovAngleVertical = _executeData.cameraFovAngleVertical, |
|
|
|
ViewSpaceToMetersFactor = 1.0f, // 1 unit is 1 meter in Unity
|
|
|
|
}; |
|
|
|
_dispatchDescription.Color = new ResourceView(textures.colorInput); |
|
|
|
_dispatchDescription.Depth = new ResourceView(textures.depth); |
|
|
|
_dispatchDescription.MotionVectors = new ResourceView(textures.motionVectors); |
|
|
|
_dispatchDescription.Exposure = new ResourceView(textures.exposureTexture); |
|
|
|
_dispatchDescription.Reactive = new ResourceView(textures.biasColorMask); |
|
|
|
_dispatchDescription.TransparencyAndComposition = new ResourceView(textures.transparencyMask); |
|
|
|
_dispatchDescription.Output = new ResourceView(textures.colorOutput); |
|
|
|
|
|
|
|
_dispatchDescription.JitterOffset = new Vector2(_executeData.jitterOffsetX, _executeData.jitterOffsetY); |
|
|
|
_dispatchDescription.MotionVectorScale = new Vector2(_executeData.MVScaleX, _executeData.MVScaleY); |
|
|
|
_dispatchDescription.RenderSize = new Vector2Int((int)_executeData.renderSizeWidth, (int)_executeData.renderSizeHeight); |
|
|
|
_dispatchDescription.InputResourceSize = new Vector2Int((int)_executeData.renderSizeWidth, (int)_executeData.renderSizeHeight); |
|
|
|
_dispatchDescription.EnableSharpening = _executeData.enableSharpening != 0; |
|
|
|
_dispatchDescription.Sharpness = _executeData.sharpness; |
|
|
|
_dispatchDescription.FrameTimeDelta = _executeData.frameTimeDelta / 1000f; |
|
|
|
_dispatchDescription.PreExposure = _executeData.preExposure; |
|
|
|
_dispatchDescription.Reset = _executeData.reset != 0; |
|
|
|
_dispatchDescription.CameraNear = _executeData.cameraNear; |
|
|
|
_dispatchDescription.CameraFar = _executeData.cameraFar; |
|
|
|
_dispatchDescription.CameraFovAngleVertical = _executeData.cameraFovAngleVertical; |
|
|
|
_dispatchDescription.ViewSpaceToMetersFactor = 1.0f; // 1 unit is 1 meter in Unity
|
|
|
|
|
|
|
|
_context.Dispatch(dispatchDescription, cmd); |
|
|
|
_context.Dispatch(_dispatchDescription, cmd); |
|
|
|
} |
|
|
|
} |
|
|
|
} |