AMD FidelityFX™ Single Pass Downsampler (SPD) provides an AMD RDNA™-optimized solution for generating up to 12 MIP levels of a texture.
Supports:
- DirectX®12 Ultimate.
- Vulkan®.
Download the latest version - v2.0
This release adds the following features:
- Support for cube textures and array textures. The SpdDownsampler function takes the slice index as a new parameter. The total number of slices is passed in with the z component of your dispatch size.
- Support for downsampling a sub-rectangle, in case only a known region of the source texture has been updated.
- CPU side helper function to compute constants:
- Dispatch size x and y.
- Thread group offsets in case only a sub-rectangle has modified data.
- Number of thread groups.
- Number of MIPs.
- Automatic reset of the global atomic counter after each SPD run: only one single initialization for the first run of SPD is required now.
Download the latest version - v2.1
This release adds the following features:
- Now part of AMD FidelityFX SDK.
- Allows you to select the filter kernel. Previously, only the mean was available, but now you can use the min and max as well.
Part of the AMD FidelityFX™ SDK
Features
Downsample in a single pass
RDNA™ optimized
Use SPD with existing postprocessing
Details
MIP levels have versions of the same texture but in smaller resolutions. They are used when the high-resolution texture is not necessarily needed (such as when objects are far from the camera, covering only a few pixels) or might introduce aliasing artefacts. MIP levels are also commonly used in effects like Bloom, Screen Space Reflections, and many more.
Use AMD FidelityFX SPD as a building block to accelerate your post processing pipeline or texture creation.
More key features
- Generates up to 12 mip levels (maximum source texture size is 4096x4096).
- Single function call.
- User defined 2x2 reduction function.
- User controlled border handling.
- Supports various image formats.
- HLSL and GLSL versions available.
- Rapid Packed Math support.
- Uses optionally subgroup operations / SM6+ wave operations, which can provide faster performance.
Generating these MIP levels is in principle quite simple. For the next lower MIP, a 2×2 pixel quad is averaged resulting in a half-sized resolution texture. The most common approach is to generate these MIP levels one after the other. This requires synchronization after each step.
AMD FidelityFX SPD instead works on patches, downsampling each patch individually using a single pass compute shader without the requirement to synchronize the whole GPU after each step. Without these in-between synchronizations it makes SPD suitable for async compute.
The traditional approach
vs.
AMD FidelityFX SPD
New for v2.0 - Support for downsampling sub-rectangles
Default approach:
- Invokes 64 thread groups.
With the sub-rectangle feature:
- Invokes 12 thread groups.
Only downsamples a subrectangle covering all patches with modified data.
Source texture: 512×512
64×64 patch with unmodified data
64×64 patch with modified data
Optimizing for the Radeon™ RDNA Architecture
Lou Kramer, Developer Technology Engineer
When AMD introduced its Navi family of GPUs, it also introduced a whole new GPU architecture: RDNA™. This architecture is not only used in AMD GPUs for PC, but also in next-generation consoles. Join the session to learn about the details of RDNA and how it differs from the previous GCN architecture. We will also be presenting examples of optimizations based on the case study of implementing an efficient downsampler covering topics such as characteristics of workload distribution, shader optimizations, and efficient texture access.
Optimizing for the Radeon™ RDNA Architecture (Let’s build 2020) – YouTube link
Learn about the details of RDNA and how it differs from the previous GCN architecture. Includes examples of optimizations based on the case study of implementing an efficient downsampler. Covers topics such as characteristics of workload distribution, shader optimizations, and efficient texture access.
Version history
- Support for cube textures and array textures: the SpdDownsampler function takes as new parameter the slice index. The total number of slices is passed in with the z component of your dispatch size.
- Support for downsampling a sub-rectangle, in case only a known region of the source texture has been updated.
- CPU side helper function to compute constants:
- dispatch size x and y
- thread group offsets in case only a sub-rectangle has modified data
- number of thread groups
- number of MIPs
- Automatic reset of the global atomic counter after each SPD run: only one single initialization for the first run of SPD is required now.
- Initial release
All part of the FidelityFX SDK!
AMD FidelityFX™ SDK
The AMD FidelityFX SDK is our easy-to-integrate solution for developers looking to include FidelityFX features into their games.
Don't miss our other effects
AMD FidelityFX™ Blur
AMD FidelityFX Blur is an AMD RDNA™ architecture optimized collection of blur kernels from 3×3 up to 21×21.
AMD FidelityFX™ Combined Adaptive Compute Ambient Occlusion (CACAO)
AMD FidelityFX Combined Adaptive Compute Ambient Occlusion (CACAO) is an AMD RDNA™ architecture optimized implementation of ambient occlusion.
AMD FidelityFX™ Contrast Adaptive Sharpening (CAS)
AMD FidelityFX Contrast Adaptive Sharpening (CAS) provides a mixed ability to sharpen and optionally scale an image.
AMD FidelityFX™ Denoiser
AMD FidelityFX Denoiser is a set of denoising compute shaders which remove artefacts from reflection and shadow rendering.
AMD FidelityFX™ Depth of Field (DoF)
AMD FidelityFX Depth of Field is an AMD RDNA™-architecture optimized implementation of physically correct camera-based depth of field.
AMD FidelityFX™ Hybrid Shadows sample
This sample demonstrates how to combine ray traced shadows and rasterized shadow maps together to achieve high quality and performance.
AMD FidelityFX™ Hybrid Stochastic Reflections sample
This sample shows how to combine AMD FidelityFX Stochastic Screen Space Reflections (SSSR) with ray tracing in order to create high quality reflections.
AMD FidelityFX™ Lens
AMD FidelityFX Lens is an AMD RDNA™ architecture optimized implementation of some of gaming’s most used post-processing effects.
AMD FidelityFX™ Luminance Preserving Mapper (HDR Mapper)
AMD FidelityFX LPM provides an open-source library to easily integrate HDR and wide gamut tone and gamut mapping into your game.
AMD FidelityFX™ Naming Guidelines in Game Titles
A set of guidelines for developers on how to present options in the game’s user interface to enable/disable AMD FidelityFX Effects.
AMD FidelityFX™ Parallel Sort
AMD FidelityFX Parallel Sort makes sorting data on the GPU quicker, and easier. Use our SM6.0 compute shaders to get your data in order.
AMD FidelityFX™ Stochastic Screen Space Reflections (SSSR)
The AMD FidelityFX SSSR effect provides an open-source library to easily integrate stochastic screen space reflections into your game.
AMD FidelityFX™ Super Resolution 1 (FSR 1)
AMD FidelityFX Super Resolution (FSR) is our open-source, high-quality, high-performance upscaling solution.
AMD FidelityFX™ Super Resolution 2 (FSR 2)
Learn even more about our new open-source temporal upscaling solution FSR 2, and get the source code and documentation!
AMD FidelityFX™ Super Resolution 3 (FSR 3)
Discover frame generation with AMD FidelityFX™ Super Resolution 3, and get the source code and documentation!
AMD FidelityFX™ Variable Shading
AMD FidelityFX Variable Shading drives Variable Rate Shading into your game.
Radeon™ Cauldron Framework
Radeon Cauldron is our open-source experimentation framework for DirectX®12 and Vulkan®, provided in the AMD FidelityFX SDK.
TressFX
The TressFX library is AMD’s hair/fur rendering and simulation technology. TressFX is designed to use the GPU to simulate and render high-quality, realistic hair and fur.