|
|
|
@ -5,22 +5,28 @@ namespace FidelityFX.OpticalFlow |
|
|
|
{ |
|
|
|
internal class OpticalFlowResources |
|
|
|
{ |
|
|
|
public readonly RenderTexture[] OpticalFlowInput = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowInputLevel1 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowInputLevel2 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowInputLevel3 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowInputLevel4 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowInputLevel5 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowInputLevel6 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[][] OpticalFlowInputLevels = |
|
|
|
{ |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
}; |
|
|
|
|
|
|
|
public readonly RenderTexture[][] OpticalFlowLevels = |
|
|
|
{ |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
new RenderTexture[2], |
|
|
|
}; |
|
|
|
|
|
|
|
public readonly RenderTexture[] OpticalFlowLevel0 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowLevel1 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowLevel2 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowLevel3 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowLevel4 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowLevel5 = new RenderTexture[2]; |
|
|
|
public readonly RenderTexture[] OpticalFlowLevel6 = new RenderTexture[2]; |
|
|
|
|
|
|
|
public RenderTexture OpticalFlowSCDHistogram; |
|
|
|
public RenderTexture OpticalFlowSCDPreviousHistogram; |
|
|
|
public RenderTexture OpticalFlowSCDTemp; |
|
|
|
@ -31,38 +37,20 @@ namespace FidelityFX.OpticalFlow |
|
|
|
|
|
|
|
const int minBlockSize = 8; |
|
|
|
Vector2Int opticalFlowTextureSize = OpticalFlow.GetOpticalFlowTextureSize(contextDescription.resolution, minBlockSize); |
|
|
|
Vector2Int opticalFlowLevel1TextureSize = NextLevelSize(opticalFlowTextureSize); |
|
|
|
Vector2Int opticalFlowLevel2TextureSize = NextLevelSize(opticalFlowLevel1TextureSize); |
|
|
|
Vector2Int opticalFlowLevel3TextureSize = NextLevelSize(opticalFlowLevel2TextureSize); |
|
|
|
Vector2Int opticalFlowLevel4TextureSize = NextLevelSize(opticalFlowLevel3TextureSize); |
|
|
|
Vector2Int opticalFlowLevel5TextureSize = NextLevelSize(opticalFlowLevel4TextureSize); |
|
|
|
Vector2Int opticalFlowLevel6TextureSize = NextLevelSize(opticalFlowLevel5TextureSize); |
|
|
|
|
|
|
|
|
|
|
|
// TODO: this seems useless, delete unless something comes up
|
|
|
|
Vector2Int opticalFlowHistogramTextureSize = OpticalFlow.GetOpticalFlowHistogramSize(0); |
|
|
|
Vector2Int globalMotionSearchMaxDispatchSize = OpticalFlow.GetGlobalMotionSearchDispatchSize(0); |
|
|
|
int globalMotionSearchTextureWidth = 4 + (globalMotionSearchMaxDispatchSize.x * globalMotionSearchMaxDispatchSize.y); |
|
|
|
|
|
|
|
CreateDoubleBufferedResource(OpticalFlowInput, "OPTICALFLOW_OpticalFlowInput", opticalFlowInputTextureSize, GraphicsFormat.R8_UInt); |
|
|
|
opticalFlowInputTextureSize = new Vector2Int(opticalFlowInputTextureSize.x >> 1, opticalFlowInputTextureSize.y >> 1); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowInputLevel1, "OPTICALFLOW_OpticalFlowInputLevel1-", opticalFlowInputTextureSize, GraphicsFormat.R8_UInt); |
|
|
|
opticalFlowInputTextureSize = new Vector2Int(opticalFlowInputTextureSize.x >> 1, opticalFlowInputTextureSize.y >> 1); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowInputLevel2, "OPTICALFLOW_OpticalFlowInputLevel2-", opticalFlowInputTextureSize, GraphicsFormat.R8_UInt); |
|
|
|
opticalFlowInputTextureSize = new Vector2Int(opticalFlowInputTextureSize.x >> 1, opticalFlowInputTextureSize.y >> 1); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowInputLevel3, "OPTICALFLOW_OpticalFlowInputLevel3-", opticalFlowInputTextureSize, GraphicsFormat.R8_UInt); |
|
|
|
opticalFlowInputTextureSize = new Vector2Int(opticalFlowInputTextureSize.x >> 1, opticalFlowInputTextureSize.y >> 1); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowInputLevel4, "OPTICALFLOW_OpticalFlowInputLevel4-", opticalFlowInputTextureSize, GraphicsFormat.R8_UInt); |
|
|
|
opticalFlowInputTextureSize = new Vector2Int(opticalFlowInputTextureSize.x >> 1, opticalFlowInputTextureSize.y >> 1); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowInputLevel5, "OPTICALFLOW_OpticalFlowInputLevel5-", opticalFlowInputTextureSize, GraphicsFormat.R8_UInt); |
|
|
|
opticalFlowInputTextureSize = new Vector2Int(opticalFlowInputTextureSize.x >> 1, opticalFlowInputTextureSize.y >> 1); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowInputLevel6, "OPTICALFLOW_OpticalFlowInputLevel6-", opticalFlowInputTextureSize, GraphicsFormat.R8_UInt); |
|
|
|
|
|
|
|
CreateDoubleBufferedResource(OpticalFlowLevel0, "OPTICALFLOW_OpticalFlow", opticalFlowTextureSize, GraphicsFormat.R16G16_SInt); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowLevel1, "OPTICALFLOW_OpticalFlowLevel1-", opticalFlowLevel1TextureSize, GraphicsFormat.R16G16_SInt); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowLevel2, "OPTICALFLOW_OpticalFlowLevel2-", opticalFlowLevel2TextureSize, GraphicsFormat.R16G16_SInt); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowLevel3, "OPTICALFLOW_OpticalFlowLevel3-", opticalFlowLevel3TextureSize, GraphicsFormat.R16G16_SInt); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowLevel4, "OPTICALFLOW_OpticalFlowLevel4-", opticalFlowLevel4TextureSize, GraphicsFormat.R16G16_SInt); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowLevel5, "OPTICALFLOW_OpticalFlowLevel5-", opticalFlowLevel5TextureSize, GraphicsFormat.R16G16_SInt); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowLevel6, "OPTICALFLOW_OpticalFlowLevel6-", opticalFlowLevel6TextureSize, GraphicsFormat.R16G16_SInt); |
|
|
|
|
|
|
|
for (int level = 0; level < OpticalFlow.OpticalFlowMaxPyramidLevels; ++level) |
|
|
|
{ |
|
|
|
CreateDoubleBufferedResource(OpticalFlowInputLevels[level], $"OPTICALFLOW_OpticalFlowInputLevel{level}-", opticalFlowInputTextureSize, GraphicsFormat.R8_UInt); |
|
|
|
CreateDoubleBufferedResource(OpticalFlowLevels[level], $"OPTICALFLOW_OpticalFlowLevel{level}-", opticalFlowTextureSize, GraphicsFormat.R16G16_SInt); |
|
|
|
|
|
|
|
opticalFlowTextureSize = NextLevelSize(opticalFlowTextureSize); |
|
|
|
opticalFlowInputTextureSize = new Vector2Int(opticalFlowInputTextureSize.x >> 1, opticalFlowInputTextureSize.y >> 1); |
|
|
|
} |
|
|
|
|
|
|
|
OpticalFlowSCDHistogram = CreateResource("OPTICALFLOW_OpticalFlowSCDHistogram", new Vector2Int(OpticalFlow.GetSCDHistogramTextureWidth(), 1), GraphicsFormat.R32_UInt); |
|
|
|
OpticalFlowSCDPreviousHistogram = CreateResource("OPTICALFLOW_OpticalFlowSCDPreviousHistogram", new Vector2Int(OpticalFlow.GetSCDHistogramTextureWidth(), 1), GraphicsFormat.R32_SFloat); |
|
|
|
@ -74,22 +62,12 @@ namespace FidelityFX.OpticalFlow |
|
|
|
DestroyResource(ref OpticalFlowSCDTemp); |
|
|
|
DestroyResource(ref OpticalFlowSCDPreviousHistogram); |
|
|
|
DestroyResource(ref OpticalFlowSCDHistogram); |
|
|
|
|
|
|
|
DestroyResource(OpticalFlowLevel6); |
|
|
|
DestroyResource(OpticalFlowLevel5); |
|
|
|
DestroyResource(OpticalFlowLevel4); |
|
|
|
DestroyResource(OpticalFlowLevel3); |
|
|
|
DestroyResource(OpticalFlowLevel2); |
|
|
|
DestroyResource(OpticalFlowLevel1); |
|
|
|
DestroyResource(OpticalFlowLevel0); |
|
|
|
|
|
|
|
DestroyResource(OpticalFlowInputLevel6); |
|
|
|
DestroyResource(OpticalFlowInputLevel5); |
|
|
|
DestroyResource(OpticalFlowInputLevel4); |
|
|
|
DestroyResource(OpticalFlowInputLevel3); |
|
|
|
DestroyResource(OpticalFlowInputLevel2); |
|
|
|
DestroyResource(OpticalFlowInputLevel1); |
|
|
|
DestroyResource(OpticalFlowInput); |
|
|
|
|
|
|
|
for (int level = 0; level < OpticalFlow.OpticalFlowMaxPyramidLevels; ++level) |
|
|
|
{ |
|
|
|
DestroyResource(OpticalFlowLevels[level]); |
|
|
|
DestroyResource(OpticalFlowInputLevels[level]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private static Vector2Int NextLevelSize(Vector2Int size) |
|
|
|
|