Browse Source

Moved a number of shared static helper methods to a new FfxUtils class

framework
Nico de Poel 2 years ago
parent
commit
9f06f24943
  1. 52
      Runtime/Common/FfxUtils.cs
  2. 11
      Runtime/Common/FfxUtils.cs.meta
  3. 45
      Runtime/FSR2/Fsr2.cs
  4. 2
      Runtime/FSR2/Fsr2Context.cs
  5. 2
      Runtime/FSR2/Fsr2Resources.cs
  6. 45
      Runtime/FSR3/Fsr3Upscaler.cs
  7. 2
      Runtime/FSR3/Fsr3UpscalerContext.cs
  8. 2
      Runtime/FSR3/Fsr3UpscalerResources.cs

52
Runtime/Common/FfxUtils.cs

@ -0,0 +1,52 @@
using UnityEngine;
namespace FidelityFX
{
public static class FfxUtils
{
public static float GetMipmapBiasOffset(int renderWidth, int displayWidth)
{
return Mathf.Log((float)renderWidth / displayWidth, 2.0f) - 1.0f;
}
public static int GetJitterPhaseCount(int renderWidth, int displayWidth)
{
const float basePhaseCount = 8.0f;
int jitterPhaseCount = (int)(basePhaseCount * Mathf.Pow((float)displayWidth / renderWidth, 2.0f));
return jitterPhaseCount;
}
public static void GetJitterOffset(out float outX, out float outY, int index, int phaseCount)
{
outX = Halton((index % phaseCount) + 1, 2) - 0.5f;
outY = Halton((index % phaseCount) + 1, 3) - 0.5f;
}
// Calculate halton number for index and base.
private static float Halton(int index, int @base)
{
float f = 1.0f, result = 0.0f;
for (int currentIndex = index; currentIndex > 0;) {
f /= @base;
result += f * (currentIndex % @base);
currentIndex = (int)Mathf.Floor((float)currentIndex / @base);
}
return result;
}
public static float Lanczos2(float value)
{
return Mathf.Abs(value) < Mathf.Epsilon ? 1.0f : Mathf.Sin(Mathf.PI * value) / (Mathf.PI * value) * (Mathf.Sin(0.5f * Mathf.PI * value) / (0.5f * Mathf.PI * value));
}
#if !UNITY_2021_1_OR_NEWER
internal static void SetBufferData(this CommandBuffer commandBuffer, ComputeBuffer computeBuffer, Array data)
{
commandBuffer.SetComputeBufferData(computeBuffer, data);
}
#endif
}
}

11
Runtime/Common/FfxUtils.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9c5c0f0b987cca64c8dfd8051e09962e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

45
Runtime/FSR2/Fsr2.cs

@ -89,51 +89,6 @@ namespace FidelityFX.FSR2
renderHeight = Mathf.RoundToInt(displayHeight / ratio); renderHeight = Mathf.RoundToInt(displayHeight / ratio);
} }
public static float GetMipmapBiasOffset(int renderWidth, int displayWidth)
{
return Mathf.Log((float)renderWidth / displayWidth, 2.0f) - 1.0f;
}
public static int GetJitterPhaseCount(int renderWidth, int displayWidth)
{
const float basePhaseCount = 8.0f;
int jitterPhaseCount = (int)(basePhaseCount * Mathf.Pow((float)displayWidth / renderWidth, 2.0f));
return jitterPhaseCount;
}
public static void GetJitterOffset(out float outX, out float outY, int index, int phaseCount)
{
outX = Halton((index % phaseCount) + 1, 2) - 0.5f;
outY = Halton((index % phaseCount) + 1, 3) - 0.5f;
}
// Calculate halton number for index and base.
private static float Halton(int index, int @base)
{
float f = 1.0f, result = 0.0f;
for (int currentIndex = index; currentIndex > 0;) {
f /= @base;
result += f * (currentIndex % @base);
currentIndex = (int)Mathf.Floor((float)currentIndex / @base);
}
return result;
}
public static float Lanczos2(float value)
{
return Mathf.Abs(value) < Mathf.Epsilon ? 1.0f : Mathf.Sin(Mathf.PI * value) / (Mathf.PI * value) * (Mathf.Sin(0.5f * Mathf.PI * value) / (0.5f * Mathf.PI * value));
}
#if !UNITY_2021_1_OR_NEWER
internal static void SetBufferData(this CommandBuffer commandBuffer, ComputeBuffer computeBuffer, Array data)
{
commandBuffer.SetComputeBufferData(computeBuffer, data);
}
#endif
public enum QualityMode public enum QualityMode
{ {
NativeAA = 0, NativeAA = 0,

2
Runtime/FSR2/Fsr2Context.cs

@ -345,7 +345,7 @@ namespace FidelityFX.FSR2
_previousJitterOffset = constants.jitterOffset; _previousJitterOffset = constants.jitterOffset;
} }
int jitterPhaseCount = Fsr2.GetJitterPhaseCount(dispatchParams.RenderSize.x, _contextDescription.DisplaySize.x);
int jitterPhaseCount = FfxUtils.GetJitterPhaseCount(dispatchParams.RenderSize.x, _contextDescription.DisplaySize.x);
if (resetAccumulation || constants.jitterPhaseCount == 0) if (resetAccumulation || constants.jitterPhaseCount == 0)
{ {
constants.jitterPhaseCount = jitterPhaseCount; constants.jitterPhaseCount = jitterPhaseCount;

2
Runtime/FSR2/Fsr2Resources.cs

@ -55,7 +55,7 @@ namespace FidelityFX.FSR2
for (int currentLanczosWidthIndex = 0; currentLanczosWidthIndex < lanczos2LutWidth; ++currentLanczosWidthIndex) for (int currentLanczosWidthIndex = 0; currentLanczosWidthIndex < lanczos2LutWidth; ++currentLanczosWidthIndex)
{ {
float x = 2.0f * currentLanczosWidthIndex / (lanczos2LutWidth - 1); float x = 2.0f * currentLanczosWidthIndex / (lanczos2LutWidth - 1);
float y = Fsr2.Lanczos2(x);
float y = FfxUtils.Lanczos2(x);
lanczos2Weights[currentLanczosWidthIndex] = y; lanczos2Weights[currentLanczosWidthIndex] = y;
} }

45
Runtime/FSR3/Fsr3Upscaler.cs

@ -89,51 +89,6 @@ namespace FidelityFX.FSR3
renderHeight = Mathf.RoundToInt(displayHeight / ratio); renderHeight = Mathf.RoundToInt(displayHeight / ratio);
} }
public static float GetMipmapBiasOffset(int renderWidth, int displayWidth)
{
return Mathf.Log((float)renderWidth / displayWidth, 2.0f) - 1.0f;
}
public static int GetJitterPhaseCount(int renderWidth, int displayWidth)
{
const float basePhaseCount = 8.0f;
int jitterPhaseCount = (int)(basePhaseCount * Mathf.Pow((float)displayWidth / renderWidth, 2.0f));
return jitterPhaseCount;
}
public static void GetJitterOffset(out float outX, out float outY, int index, int phaseCount)
{
outX = Halton((index % phaseCount) + 1, 2) - 0.5f;
outY = Halton((index % phaseCount) + 1, 3) - 0.5f;
}
// Calculate halton number for index and base.
private static float Halton(int index, int @base)
{
float f = 1.0f, result = 0.0f;
for (int currentIndex = index; currentIndex > 0;) {
f /= @base;
result += f * (currentIndex % @base);
currentIndex = (int)Mathf.Floor((float)currentIndex / @base);
}
return result;
}
public static float Lanczos2(float value)
{
return Mathf.Abs(value) < Mathf.Epsilon ? 1.0f : Mathf.Sin(Mathf.PI * value) / (Mathf.PI * value) * (Mathf.Sin(0.5f * Mathf.PI * value) / (0.5f * Mathf.PI * value));
}
#if !UNITY_2021_1_OR_NEWER
internal static void SetBufferData(this CommandBuffer commandBuffer, ComputeBuffer computeBuffer, Array data)
{
commandBuffer.SetComputeBufferData(computeBuffer, data);
}
#endif
public enum QualityMode public enum QualityMode
{ {
NativeAA = 0, NativeAA = 0,

2
Runtime/FSR3/Fsr3UpscalerContext.cs

@ -386,7 +386,7 @@ namespace FidelityFX.FSR3
_previousJitterOffset = constants.jitterOffset; _previousJitterOffset = constants.jitterOffset;
} }
int jitterPhaseCount = Fsr3Upscaler.GetJitterPhaseCount(dispatchParams.RenderSize.x, _contextDescription.MaxUpscaleSize.x);
int jitterPhaseCount = FfxUtils.GetJitterPhaseCount(dispatchParams.RenderSize.x, _contextDescription.MaxUpscaleSize.x);
if (resetAccumulation || constants.jitterPhaseCount == 0) if (resetAccumulation || constants.jitterPhaseCount == 0)
{ {
constants.jitterPhaseCount = jitterPhaseCount; constants.jitterPhaseCount = jitterPhaseCount;

2
Runtime/FSR3/Fsr3UpscalerResources.cs

@ -59,7 +59,7 @@ namespace FidelityFX.FSR3
for (int currentLanczosWidthIndex = 0; currentLanczosWidthIndex < lanczos2LutWidth; ++currentLanczosWidthIndex) for (int currentLanczosWidthIndex = 0; currentLanczosWidthIndex < lanczos2LutWidth; ++currentLanczosWidthIndex)
{ {
float x = 2.0f * currentLanczosWidthIndex / (lanczos2LutWidth - 1); float x = 2.0f * currentLanczosWidthIndex / (lanczos2LutWidth - 1);
float y = Fsr3Upscaler.Lanczos2(x);
float y = FfxUtils.Lanczos2(x);
lanczos2Weights[currentLanczosWidthIndex] = y; lanczos2Weights[currentLanczosWidthIndex] = y;
} }

Loading…
Cancel
Save