FidelityFX FSR2

FidelityFX Super Resolution 2 runtime library.

Typedefs

Type

Description

typedef void

(*FfxFsr2Message )( FfxMsgType type, const wchar_t *message )
Pass a string message.

Enumerations

Name

Description

FfxFsr2InitializationFlagBits

An enumeration of bit flags used when creating a “FfxFsr2Context“. See “FfxFsr2ContextDescription“.
FFX_FSR2_ENABLE_HIGH_DYNAMIC_RANGE = (1<<0) – A bit indicating if the input color data provided is using a high-dynamic range.
FFX_FSR2_ENABLE_DISPLAY_RESOLUTION_MOTION_VECTORS = (1<<1) – A bit indicating if the motion vectors are rendered at display resolution.
FFX_FSR2_ENABLE_MOTION_VECTORS_JITTER_CANCELLATION = (1<<2) – A bit indicating that the motion vectors have the jittering pattern applied to them.
FFX_FSR2_ENABLE_DEPTH_INVERTED = (1<<3) – A bit indicating that the input depth buffer data provided is inverted [1..0].
FFX_FSR2_ENABLE_DEPTH_INFINITE = (1<<4) – A bit indicating that the input depth buffer data provided is using an infinite far plane.
FFX_FSR2_ENABLE_AUTO_EXPOSURE = (1<<5) – A bit indicating if automatic exposure should be applied to input color data.
FFX_FSR2_ENABLE_DYNAMIC_RESOLUTION = (1<<6) – A bit indicating that the application uses dynamic resolution scaling.
FFX_FSR2_ENABLE_TEXTURE1D_USAGE = (1<<7) – A bit indicating that the backend should use 1D textures.
FFX_FSR2_ENABLE_DEBUG_CHECKING = (1<<8) – A bit indicating that the runtime should check some API values and report issues.

FfxFsr2Pass

An enumeration of all the passes which constitute the FSR2 algorithm.
FFX_FSR2_PASS_DEPTH_CLIP = 0 – A pass which performs depth clipping.
FFX_FSR2_PASS_RECONSTRUCT_PREVIOUS_DEPTH = 1 – A pass which performs reconstruction of previous frame’s depth.
FFX_FSR2_PASS_LOCK = 2 – A pass which calculates pixel locks.
FFX_FSR2_PASS_ACCUMULATE = 3 – A pass which performs upscaling.
FFX_FSR2_PASS_ACCUMULATE_SHARPEN = 4 – A pass which performs upscaling when sharpening is used.
FFX_FSR2_PASS_RCAS = 5 – A pass which performs sharpening.
FFX_FSR2_PASS_COMPUTE_LUMINANCE_PYRAMID = 6 – A pass which generates the luminance mipmap chain for the current frame.
FFX_FSR2_PASS_GENERATE_REACTIVE = 7 – An optional pass to generate a reactive mask.
FFX_FSR2_PASS_TCR_AUTOGENERATE = 8 – An optional pass to automatically generate transparency/composition and reactive masks.
FFX_FSR2_PASS_COUNT – The number of passes performed by FSR2.

FfxFsr2QualityMode

An enumeration of all the quality modes supported by FidelityFX Super Resolution 2 upscaling.
FFX_FSR2_QUALITY_MODE_QUALITY = 1 – Perform upscaling with a per-dimension upscaling ratio of 1.5x.
FFX_FSR2_QUALITY_MODE_BALANCED = 2 – Perform upscaling with a per-dimension upscaling ratio of 1.7x.
FFX_FSR2_QUALITY_MODE_PERFORMANCE = 3 – Perform upscaling with a per-dimension upscaling ratio of 2.0x.
FFX_FSR2_QUALITY_MODE_ULTRA_PERFORMANCE = 4 – Perform upscaling with a per-dimension upscaling ratio of 3.0x.

Structs

Name

Description

FfxFsr2Context

A structure encapsulating the FidelityFX Super Resolution 2 context.

FfxFsr2ContextDescription

A structure encapsulating the parameters required to initialize FidelityFX Super Resolution 2 upscaling.

FfxFsr2DispatchDescription

A structure encapsulating the parameters for dispatching the various passes of FidelityFX Super Resolution 2.

FfxFsr2GenerateReactiveDescription

A structure encapsulating the parameters for automatic generation of a reactive mask.

Functions

Return type

Description

FFX_API FfxErrorCode

ffxFsr2ContextCreate ( FfxFsr2Context * pContext, const FfxFsr2ContextDescription * pContextDescription )
Create a FidelityFX Super Resolution 2 context from the parameters programmed to the “FfxFsr2CreateParams“ structure.

FFX_API FfxErrorCode

Get GPU memory usage of the FidelityFX Super Resolution context.

FFX_API FfxErrorCode

ffxFsr2ContextDispatch ( FfxFsr2Context * pContext, const FfxFsr2DispatchDescription * pDispatchDescription )
Dispatch the various passes that constitute FidelityFX Super Resolution 2.

FFX_API FfxErrorCode

A helper function generate a Reactive mask from an opaque only texure and one containing translucent objects.

FFX_API FfxErrorCode

Destroy the FidelityFX Super Resolution context.

FFX_API float

ffxFsr2GetUpscaleRatioFromQualityMode (FfxFsr2QualityMode qualityMode)
Get the upscale ratio from the quality mode.

FFX_API FfxErrorCode

ffxFsr2GetRenderResolutionFromQualityMode ( uint32_t* pRenderWidth, uint32_t* pRenderHeight, uint32_t displayWidth, uint32_t displayHeight, FfxFsr2QualityMode qualityMode )
A helper function to calculate the rendering resolution from a target resolution and desired quality level.

FFX_API int32_t

ffxFsr2GetJitterPhaseCount (int32_t renderWidth, int32_t displayWidth)
A helper function to calculate the jitter phase count from display resolution.

FFX_API FfxErrorCode

ffxFsr2GetJitterOffset ( float* pOutX, float* pOutY, int32_t index, int32_t phaseCount )
A helper function to calculate the subpixel jitter offset.

FFX_API bool

A helper function to check if a resource is “FFX_FSR2_RESOURCE_IDENTIFIER_NULL“.

FFX_API FfxVersionNumber

Queries the effect version number.

Macros

Name

Description

FFX_FSR2_CONTEXT_COUNT 1

FidelityFX Super Resolution 2 context count.

FFX_FSR2_CONTEXT_SIZE (FFX_SDK_DEFAULT_CONTEXT_SIZE)

The size of the context specified in 32bit values.

FFX_FSR2_VERSION_MAJOR (2)

FidelityFX Super Resolution 2 major version.

FFX_FSR2_VERSION_MINOR (3)

FidelityFX Super Resolution 2 minor version.

FFX_FSR2_VERSION_PATCH (2)

FidelityFX Super Resolution 2 patch version.

Detailed description

FidelityFX Super Resolution 2 runtime library.

Typedefs

FfxFsr2Message

Copied!

typedef void (*FfxFsr2Message )(
    FfxMsgType type,
    const wchar_t *message
    )

Pass a string message.

Used for debug messages.

Parameters:

type

The type of message.

message

A string message to pass.


Global functions

ffxFsr2ContextCreate

Copied!

FFX_API  FfxErrorCode  ffxFsr2ContextCreate (
    FfxFsr2Context * pContext,
    const FfxFsr2ContextDescription * pContextDescription
)

Create a FidelityFX Super Resolution 2 context from the parameters programmed to the FfxFsr2CreateParams structure.

The context structure is the main object used to interact with the FSR2 API, and is responsible for the management of the internal resources used by the FSR2 algorithm. When this API is called, multiple calls will be made via the pointers contained in the callbacks structure. These callbacks will attempt to retreive the device capabilities, and create the internal resources, and pipelines required by FSR2’s frame-to-frame function. Depending on the precise configuration used when creating the FfxFsr2Context a different set of resources and pipelines might be requested via the callback functions.

The flags included in the flags field of FfxFsr2Context how match the configuration of your application as well as the intended use of FSR2. It is important that these flags are set correctly (as well as a correct programmed FfxFsr2DispatchDescription) to ensure correct operation. It is recommended to consult the overview documentation for further details on how FSR2 should be integerated into an application.

When the FfxFsr2Context is created, you should use the ffxFsr2ContextDispatch function each frame where FSR2 upscaling should be applied. See the documentation of ffxFsr2ContextDispatch for more details.

The FfxFsr2Context should be destroyed when use of it is completed, typically when an application is unloaded or FSR2 upscaling is disabled by a user. To destroy the FSR2 context you should call ffxFsr2ContextDestroy.

Parameters:

pContext

A pointer to a FfxFsr2Context structure to populate.

pContextDescription

A pointer to a FfxFsr2ContextDescription structure.

Return values:

FFX_OK

The operation completed successfully.

FFX_ERROR_CODE_NULL_POINTER

The operation failed because either context or contextDescription was NULL.

FFX_ERROR_INCOMPLETE_INTERFACE

The operation failed because the FfxFsr2ContextDescription.callbacks was not fully specified.

FFX_ERROR_BACKEND_API_ERROR

The operation failed because of an error returned from the backend.


ffxFsr2ContextGetGpuMemoryUsage

Copied!

FFX_API  FfxErrorCode  ffxFsr2ContextGetGpuMemoryUsage (
    FfxFsr2Context * pContext,
    FfxEffectMemoryUsage * pVramUsage
)

Get GPU memory usage of the FidelityFX Super Resolution context.

Parameters:

pContext

A pointer to a FfxFsr2Context structure.

pVramUsage

A pointer to a FfxEffectMemoryUsage structure.

Return values:

FFX_OK

The operation completed successfully.

FFX_ERROR_CODE_NULL_POINTER

The operation failed because either context or vramUsage were NULL.


ffxFsr2ContextDispatch

Copied!

FFX_API  FfxErrorCode  ffxFsr2ContextDispatch (
    FfxFsr2Context * pContext,
    const FfxFsr2DispatchDescription * pDispatchDescription
)

Dispatch the various passes that constitute FidelityFX Super Resolution 2.

FSR2 is a composite effect, meaning that it is compromised of multiple constituent passes (implemented as one or more clears, copies and compute dispatches). The ffxFsr2ContextDispatch function is the function which (via the use of the functions contained in the callbacks field of the FfxFsr2Context structure) utlimately generates the sequence of graphics API calls required each frame.

As with the creation of the FfxFsr2Context correctly programming the FfxFsr2DispatchDescription is key to ensuring the correct operation of FSR2. It is particularly important to ensure that camera jitter is correctly applied to your application’s projection matrix (or camera origin for raytraced applications). FSR2 provides the ffxFsr2GetJitterPhaseCount and ffxFsr2GetJitterOffset entry points to help applications correctly compute the camera jitter. Whatever jitter pattern is used by the application it should be correctly programmed to the jitterOffset field of the dispatchDescription structure. For more guidance on camera jitter please consult the documentation for ffxFsr2GetJitterOffset as well as the accompanying overview documentation for FSR2.

Parameters:

pContext

A pointer to a FfxFsr2Context structure.

pDispatchDescription

A pointer to a FfxFsr2DispatchDescription structure.

Return values:

FFX_OK

The operation completed successfully.

FFX_ERROR_CODE_NULL_POINTER

The operation failed because either context or dispatchDescription was NULL.

FFX_ERROR_OUT_OF_RANGE

The operation failed because dispatchDescription.renderSize was larger than the maximum render resolution.

FFX_ERROR_NULL_DEVICE

The operation failed because the device inside the context was NULL.

FFX_ERROR_BACKEND_API_ERROR

The operation failed because of an error returned from the backend.


ffxFsr2ContextGenerateReactiveMask

Copied!

FFX_API  FfxErrorCode  ffxFsr2ContextGenerateReactiveMask (
    FfxFsr2Context * pContext,
    const FfxFsr2GenerateReactiveDescription * pParams
)

A helper function generate a Reactive mask from an opaque only texure and one containing translucent objects.

Parameters:

pContext

A pointer to a FfxFsr2Context structure.

pParams

A pointer to a FfxFsr2GenerateReactiveDescription structure

Return values:

FFX_OK

The operation completed successfully.


ffxFsr2ContextDestroy

Copied!

FFX_API  FfxErrorCode  ffxFsr2ContextDestroy (FfxFsr2Context * pContext)

Destroy the FidelityFX Super Resolution context.

Parameters:

pContext

A pointer to a FfxFsr2Context structure to destroy.

Return values:

FFX_OK

The operation completed successfully.

FFX_ERROR_CODE_NULL_POINTER

The operation failed because either context was NULL.


ffxFsr2GetUpscaleRatioFromQualityMode

Copied!

FFX_API  float ffxFsr2GetUpscaleRatioFromQualityMode (FfxFsr2QualityMode  qualityMode)

Get the upscale ratio from the quality mode.

The following table enumerates the mapping of the quality modes to per-dimension scaling ratios.

Quality preset

Scale factor

FFX_FSR2_QUALITY_MODE_QUALITY

1.5x

FFX_FSR2_QUALITY_MODE_BALANCED

1.7x

FFX_FSR2_QUALITY_MODE_PERFORMANCE

2.0x

FFX_FSR2_QUALITY_MODE_ULTRA_PERFORMANCE

3.0x

Passing an invalid qualityMode will return 0.0f.

Parameters:

qualityMode

The quality mode preset.

Returns:

The upscaling the per-dimension upscaling ratio for qualityMode according to the table above.


ffxFsr2GetRenderResolutionFromQualityMode

Copied!

FFX_API  FfxErrorCode  ffxFsr2GetRenderResolutionFromQualityMode (
    uint32_t* pRenderWidth,
    uint32_t* pRenderHeight,
    uint32_t displayWidth,
    uint32_t displayHeight,
    FfxFsr2QualityMode  qualityMode
)

A helper function to calculate the rendering resolution from a target resolution and desired quality level.

This function applies the scaling factor returned by ffxFsr2GetUpscaleRatioFromQualityMode to each dimension.

Parameters:

pRenderWidth

A pointer to a uint32_t which will hold the calculated render resolution width.

pRenderHeight

A pointer to a uint32_t which will hold the calculated render resolution height.

displayWidth

The target display resolution width.

displayHeight

The target display resolution height.

qualityMode

The desired quality mode for FSR 2 upscaling.

Return values:

FFX_OK

The operation completed successfully.

FFX_ERROR_INVALID_POINTER

Either renderWidth or renderHeight was NULL.

FFX_ERROR_INVALID_ENUM

An invalid quality mode was specified.


ffxFsr2GetJitterPhaseCount

Copied!

FFX_API  int32_t ffxFsr2GetJitterPhaseCount (
    int32_t renderWidth,
    int32_t displayWidth
)

A helper function to calculate the jitter phase count from display resolution.

For more detailed information about the application of camera jitter to your application’s rendering please refer to the ffxFsr2GetJitterOffset function.

The table below shows the jitter phase count which this function would return for each of the quality presets.

Quality preset

Scale factor

Phase count

FFX_FSR2_QUALITY_MODE_QUALITY

1.5x

18

FFX_FSR2_QUALITY_MODE_BALANCED

1.7x

23

FFX_FSR2_QUALITY_MODE_PERFORMANCE

2.0x

32

FFX_FSR2_QUALITY_MODE_ULTRA_PERFORMANCE

3.0x

72

Custom

[1..n]x

ceil(8*n^2)

Parameters:

renderWidth

The render resolution width.

displayWidth

The display resolution width.

Returns:

The jitter phase count for the scaling factor between renderWidth and displayWidth.


ffxFsr2GetJitterOffset

Copied!

FFX_API  FfxErrorCode  ffxFsr2GetJitterOffset (
    float* pOutX,
    float* pOutY,
    int32_t index,
    int32_t phaseCount
)

A helper function to calculate the subpixel jitter offset.

FSR2 relies on the application to apply sub-pixel jittering while rendering. This is typically included in the projection matrix of the camera. To make the application of camera jitter simple, the FSR2 API provides a small set of utility function which computes the sub-pixel jitter offset for a particular frame within a sequence of separate jitter offsets. To begin, the index within the jitter phase must be computed. To calculate the sequence’s length, you can call the ffxFsr2GetJitterPhaseCount function. The index should be a value which is incremented each frame modulo the length of the sequence computed by ffxFsr2GetJitterPhaseCount. The index within the jitter phase is passed to ffxFsr2GetJitterOffset via the index parameter.

This function uses a Halton(2,3) sequence to compute the jitter offset. The ultimate index used for the sequence is index % phaseCount.

It is important to understand that the values returned from the ffxFsr2GetJitterOffset function are in unit pixel space, and in order to composite this correctly into a projection matrix we must convert them into projection offsets. This is done as per the pseudo code listing which is shown below.

Copied!

const int32_t jitterPhaseCount = ffxFsr2GetJitterPhaseCount(renderWidth, displayWidth);

float jitterX = 0;
float jitterY = 0;
ffxFsr2GetJitterOffset(&jitterX, &jitterY, index, jitterPhaseCount);

const float jitterX = 2.0f * jitterX / (float)renderWidth;
const float jitterY = -2.0f * jitterY / (float)renderHeight;
const Matrix4 jitterTranslationMatrix = translateMatrix(Matrix3::identity, Vector3(jitterX, jitterY, 0));
const Matrix4 jitteredProjectionMatrix = jitterTranslationMatrix * projectionMatrix;

Jitter should be applied to all rendering. This includes opaque, alpha transparent, and raytraced objects. For rasterized objects, the sub-pixel jittering values calculated by the iffxFsr2GetJitterOffset function can be applied to the camera projection matrix which is ultimately used to perform transformations during vertex shading. For raytraced rendering, the sub-pixel jitter should be applied to the ray’s origin, often the camera’s position.

Whether you elect to use the ffxFsr2GetJitterOffset function or your own sequence generator, you must program the jitterOffset field of the FfxFsr2DispatchParameters structure in order to inform FSR2 of the jitter offset that has been applied in order to render each frame.

If not using the recommended ffxFsr2GetJitterOffset function, care should be taken that your jitter sequence never generates a null vector; that is value of 0 in both the X and Y dimensions.

Parameters:

pOutX

A pointer to a float which will contain the subpixel jitter offset for the x dimension.

pOutY

A pointer to a float which will contain the subpixel jitter offset for the y dimension.

index

The index within the jitter sequence.

phaseCount

The length of jitter phase. See ffxFsr2GetJitterPhaseCount.

Return values:

FFX_OK

The operation completed successfully.

FFX_ERROR_INVALID_POINTER

Either outX or outY was NULL.

FFX_ERROR_INVALID_ARGUMENT

Argument phaseCount must be greater than 0.


ffxFsr2ResourceIsNull

Copied!

FFX_API  bool ffxFsr2ResourceIsNull (FfxResource  resource)

A helper function to check if a resource is FFX_FSR2_RESOURCE_IDENTIFIER_NULL.

Parameters:

resource

A FfxResource.

Returns:

true The resource was not FFX_FSR2_RESOURCE_IDENTIFIER_NULL.

false The resource was FFX_FSR2_RESOURCE_IDENTIFIER_NULL.


ffxFsr2GetEffectVersion

Copied!

FFX_API  FfxVersionNumber  ffxFsr2GetEffectVersion ()

Queries the effect version number.

Returns:

The SDK version the effect was built with.


Macros

FFX_FSR2_CONTEXT_COUNT

Copied!

#define FFX_FSR2_CONTEXT_COUNT 1

FidelityFX Super Resolution 2 context count.

Defines the number of internal effect contexts required by FSR2


FFX_FSR2_CONTEXT_SIZE

Copied!

#define FFX_FSR2_CONTEXT_SIZE (FFX_SDK_DEFAULT_CONTEXT_SIZE)

The size of the context specified in 32bit values.


FFX_FSR2_VERSION_MAJOR

Copied!

#define FFX_FSR2_VERSION_MAJOR (2)

FidelityFX Super Resolution 2 major version.


FFX_FSR2_VERSION_MINOR

Copied!

#define FFX_FSR2_VERSION_MINOR (3)

FidelityFX Super Resolution 2 minor version.


FFX_FSR2_VERSION_PATCH

Copied!

#define FFX_FSR2_VERSION_PATCH (2)

FidelityFX Super Resolution 2 patch version.