- Introduction to the AMD FidelityFX SDK
- Samples
- Samples
- FidelityFX Blur
- FidelityFX Breadcrumbs
- FidelityFX Brixelizer GI
- FidelityFX Combined Adaptive Compute Ambient Occlusion (CACAO)
- FidelityFX Contrast Adaptive Sharpening
- FidelityFX Depth of Field
- FidelityFX Hybrid Reflections
- FidelityFX Hybrid Shadows
- FidelityFX Lens
- FidelityFX Luminance Preserving Mapper
- FidelityFX Parallel Sort
- FidelityFX Single Pass Downsampler
- FidelityFX Stochastic Screen-Space Reflections
- FidelityFX Super Resolution
- FidelityFX Variable Shading
- Techniques
- Techniques
- FidelityFX Blur 1.1
- FidelityFX Breadcrumbs 1.0.1
- FidelityFX Brixelizer 1.0
- FidelityFX Brixelizer GI 1.0.1
- FidelityFX Classifier 1.3
- FidelityFX Combined Adaptive Compute Ambient Occlusion (CACAO) 1.4
- FidelityFX Contrast Adaptive Sharpening 1.2
- FidelityFX Denoiser 1.3
- FidelityFX Depth of Field 1.1
- FidelityFX Frame Interpolation 1.1.3
- FidelityFX Frame Interpolation Swapchain 1.1.3
- FidelityFX Lens 1.1
- FidelityFX Luminance Preserving Mapper 1.4
- FidelityFX Optical Flow 1.1.2
- FidelityFX Parallel Sort 1.3
- FidelityFX Single Pass Downsampler 2.2
- FidelityFX Stochastic Screen-Space Reflections 1.5
- FidelityFX Super Resolution 3.1.4 (FSR3) - Upscaling and Frame Generation
- FidelityFX Super Resolution 1.2 (FSR1)
- FidelityFX Super Resolution 2.3.3 (FSR2)
- FidelityFX Super Resolution 3.1.4 (FSR3) - Upscaler
- FidelityFX Variable Shading 1.2
- License
- Reference Documentation
- Samples
- Effect_samples
- FidelityFX_Breadcrumbs_sample
- FidelityFX_Brixelizer_sample
- FidelityFX_Hybrid_Reflections_sample
- FidelityFX_Luma_Preserving_Mapper_sample
- FidelityFX_Parallel_Sort_sample
- Effect samples
- Samples
- Classes
- AnimatedTexturesRenderModule
- BlurRenderModule
- BreadcrumbsRenderModule
- BrixelizerGIRenderModule
- CACAORenderModule
- CASRenderModule
- CacaoSample
- DoFRenderModule
- FSRRenderModule
- GBufferRenderModule
- GLSLCompiler
- GPUParticleRenderModule
- HLSLCompiler
- HybridReflectionsRenderModule
- HybridShadowsRenderModule
- ICompiler
- LPMRenderModule
- LensRenderModule
- LightingRenderModule
- ParallelSort
- ParallelSortRenderModule
- RasterShadowRenderModule
- SPDRenderModule
- SSSRRenderModule
- SkyDomeRenderModule
- TAARenderModule
- TranslucencyRenderModule
- VRSRenderModule
- Structs
- AnimSampler
- BilinearSamplingData
- BlurRenderModule::ComparisonConstants
- BlurRenderModule::Constants
- BlurRenderModule::MultiPassParameterSets
- BlurRenderModule::ParameterSets
- BrixelizerExampleConstants
- BrixelizerGIRenderModule::BrixelizerBufferInfo
- BrixelizerGIRenderModule::BrixelizerInstanceInfo
- CacaoPreset
- CameraInformation
- ClassifyResults
- DepthExtents
- FFX_CACAO_BilateralBufferVal
- FFX_CACAO_Edges_4
- FFX_CACAO_PrepareNormalsInputDepths
- FFX_CACAO_SSAOHits
- FFX_CACAO_SSAOSampleData
- FFX_DNSR_Reflections_Moments
- FFX_DNSR_Reflections_NeighborhoodSample
- FetchedBicubicSamples
- FetchedBilinearSamples
- FfxAllocationCallbacks
- FfxBarrierDescription
- FfxBlurContext
- FfxBlurContextDescription
- FfxBlurDispatchDescription
- FfxBreadcrumbsBlockData
- FfxBreadcrumbsCommandListDescription
- FfxBreadcrumbsContext
- FfxBreadcrumbsContextDescription
- FfxBreadcrumbsMarkersStatus
- FfxBreadcrumbsNameTag
- FfxBreadcrumbsPipelineStateDescription
- FfxBrixelizerAABB
- FfxBrixelizerBakedUpdateDescription
- FfxBrixelizerBasicMeshInfo
- FfxBrixelizerBrixelizationJob
- FfxBrixelizerBufferDescription
- FfxBrixelizerBuildInfo
- FfxBrixelizerCRItem
- FfxBrixelizerCRItemPacked
- FfxBrixelizerCRVoxelTriangleBounds
- FfxBrixelizerCascadeDescription
- FfxBrixelizerCascadeInfo
- FfxBrixelizerCascadeResources
- FfxBrixelizerCascadeStats
- FfxBrixelizerContext
- FfxBrixelizerContextDescription
- FfxBrixelizerContextInfo
- FfxBrixelizerContextStats
- FfxBrixelizerDebugAABB
- FfxBrixelizerDebugCounters
- FfxBrixelizerDebugInfo
- FfxBrixelizerDebugVisualizationDescription
- FfxBrixelizerGIConstants
- FfxBrixelizerGIContext
- FfxBrixelizerGIContextDescription
- FfxBrixelizerGIDebugDescription
- FfxBrixelizerGIDispatchDescription
- FfxBrixelizerGIPassConstants
- FfxBrixelizerGIProbeSpawnInfo
- FfxBrixelizerGIScalingConstants
- FfxBrixelizerGISpecularNeighborhoodSample
- FfxBrixelizerGITracingConstants
- FfxBrixelizerHit
- FfxBrixelizerHitRaw
- FfxBrixelizerHitWithNormal
- FfxBrixelizerIndexRef
- FfxBrixelizerIndirectOffsets
- FfxBrixelizerInstanceDescription
- FfxBrixelizerInstanceInfo
- FfxBrixelizerInstanceReference
- FfxBrixelizerRawCascadeDescription
- FfxBrixelizerRawCascadeUpdateDescription
- FfxBrixelizerRawContext
- FfxBrixelizerRawContextDescription
- FfxBrixelizerRawInstanceDescription
- FfxBrixelizerRawJobDescription
- FfxBrixelizerRayDesc
- FfxBrixelizerResources
- FfxBrixelizerScratchCounters
- FfxBrixelizerStats
- FfxBrixelizerTriangle
- FfxBrixelizerTrianglePartial
- FfxBrixelizerTrianglePartialCompressed
- FfxBrixelizerTrianglePos
- FfxBrixelizerTriangleReference
- FfxBrixelizerUpdateDescription
- FfxBufferSRV
- FfxBufferUAV
- FfxBxAtlasBounds
- FfxCacaoBufferSizeInfo
- FfxCacaoConstants
- FfxCacaoContext
- FfxCacaoContextDescription
- FfxCacaoDispatchDescription
- FfxCacaoSettings
- FfxCasContext
- FfxCasContextDescription
- FfxCasDispatchDescription
- FfxClassifierContext
- FfxClassifierContextDescription
- FfxClassifierReflectionDispatchDescription
- FfxClassifierShadowDispatchDescription
- FfxClearFloatJobDescription
- FfxComputeJobDescription
- FfxConstantBuffer
- FfxCopyJobDescription
- FfxCreateResourceDescription
- FfxDebugViewport
- FfxDenoiserContext
- FfxDenoiserContextDescription
- FfxDenoiserReflectionsDispatchDescription
- FfxDenoiserShadowsDispatchDescription
- FfxDeviceCapabilities
- FfxDimensions2D
- FfxDiscardJobDescription
- FfxDofAccumulators
- FfxDofBucket
- FfxDofContext
- FfxDofContextDescription
- FfxDofDispatchDescription
- FfxDofInputState
- FfxDofRingParams
- FfxDofSample
- FfxDofTileClass
- FfxEffectBindlessConfig
- FfxEffectMemoryUsage
- FfxExecuteGPUJobParams
- FfxFloatCoords2D
- FfxFrameGenerationConfig
- FfxFrameGenerationDispatchDescription
- FfxFrameInterpolationContext
- FfxFrameInterpolationContextDescription
- FfxFrameInterpolationDebugViewport
- FfxFrameInterpolationDispatchDescription
- FfxFrameInterpolationPrepareDescription
- FfxFrameInterpolationSharedResourceDescriptions
- FfxFsr1Context
- FfxFsr1ContextDescription
- FfxFsr1DispatchDescription
- FfxFsr2Context
- FfxFsr2ContextDescription
- FfxFsr2DispatchDescription
- FfxFsr2GenerateReactiveDescription
- FfxFsr3Context
- FfxFsr3ContextDescription
- FfxFsr3DispatchFrameGenerationPrepareDescription
- FfxFsr3DispatchUpscaleDescription
- FfxFsr3GenerateReactiveDescription
- FfxFsr3UpscalerContext
- FfxFsr3UpscalerContextDescription
- FfxFsr3UpscalerDispatchDescription
- FfxFsr3UpscalerGenerateReactiveDescription
- FfxFsr3UpscalerSharedResourceDescriptions
- FfxGpuJobDescription
- FfxIntCoords2D
- FfxInterface
- FfxInternalResourceDescription
- FfxLensContext
- FfxLensContextDescription
- FfxLensDispatchDescription
- FfxLpmContext
- FfxLpmContextDescription
- FfxLpmDispatchDescription
- FfxOpticalflowContext
- FfxOpticalflowContextDescription
- FfxOpticalflowDispatchDescription
- FfxOpticalflowSharedResourceDescriptions
- FfxParallelSortConstants
- FfxParallelSortContext
- FfxParallelSortContextDescription
- FfxParallelSortDispatchDescription
- FfxPipelineDescription
- FfxPipelineState
- FfxPresentCallbackDescription
- FfxPresentXParams
- FfxRasterJobDescription
- FfxRay
- FfxRect2D
- FfxResource
- FfxResourceBinding
- FfxResourceDescription
- FfxResourceInitData
- FfxResourceInternal
- FfxRootConstantAllocation
- FfxRootConstantDescription
- FfxSamplerDescription
- FfxShaderBlob
- FfxSpdContext
- FfxSpdContextDescription
- FfxSpdDispatchDescription
- FfxSssrContext
- FfxSssrContextDescription
- FfxSssrDispatchDescription
- FfxStaticResourceDescription
- FfxSwapchainFramePacingTuning
- FfxSwapchainReplacementFunctions
- FfxTextureSRV
- FfxTextureUAV
- FfxViewDescription
- FfxVrsContext
- FfxVrsContextDescription
- FfxVrsDispatchDescription
- FrameInfo
- FrameInterpolationReplacementParametersVK
- GBufferRenderModule::BoundTexture
- GBufferRenderModule::PipelineRenderGroup
- GBufferRenderModule::PipelineSurfaceRenderInfo
- GLSLShaderBinary
- GPUParticlePartA
- GPUParticlePartB
- HDRCBData
- HLSLDxcShaderBinary
- HLSLFxcShaderBinary
- HybridReflectionsRenderModule::RTInfoTables
- HybridReflectionsRenderModule::RTInfoTables::BoundTexture
- HybridShadowsRenderModule::DebugTilesConstantBuffer
- HybridShadowsRenderModule::RTConstantBuffer
- IReflectionData
- IShaderBinary
- IndirectCommand
- Instance_Info
- InstanceInformation
- InterpolationSourceColor
- LightInformation
- LumaInstabilityFactorData
- MagnifierCBData
- Material_Info
- MaterialInfo
- MaterialInformation
- MatrixPair
- OptionalTransparencyOptions
- Permutation
- PreviousLumaBilinearSamplesData
- RasterShadowRenderModule::BoundTexture
- RasterShadowRenderModule::PipelineRenderGroup
- RasterShadowRenderModule::PipelineSurfaceRenderInfo
- RasterShadowRenderModule::ShadowMapInfo
- RaySetup
- SPDDownsampleInfo
- SPDRenderModule::PipelineSet
- SPDVerifyConstants
- SampleSet
- SampleStreamState
- SceneInformation
- SceneLightingInformation
- ShaderResourceInfo
- ShadingChangeLumaInfo
- Surface_Info
- SwapchainCBData
- TextureIndices
- Tile
- TranslucencyRenderModule::BoundTexture
- TranslucencyRenderModule::ParticlesRenderData
- TranslucencyRenderModule::PipelineHashObject
- TranslucencyRenderModule::PipelineParticlesRenderInfo
- TranslucencyRenderModule::PipelineSurfaceRenderInfo
- TranslucencyRenderModule::TranslucentRenderData
- UpscalerInformation
- VRSRenderModule::MotionVectorsRenderData
- VRSRenderModule::PipelineHashObject
- VRSRenderModule::PipelineSurfaceRenderInfo
- VS_SURFACE_OUTPUT
- VectorFieldEntry
- VertexStrides
- VkDeviceContext
- VkFrameInterpolationInfoFFX
- VkQueueInfoFFX
- Disclaimers
FidelityFX Variable Shading
This sample demonstrates the use of the FidelityFX Variable Shading (VRS) compute algorithm.
For details on the techniques that underpins the Variable Shading effect you can refer to the respective technique documentation.
Requirements
- Windows
- DirectX(R)12
- Vulkan(R)
UI elements
The sample contains various UI elements to help you explore the techniques it demonstrates. The table below summarises the UI elements and what they control within the sample.
Element name | Value | Description |
---|---|---|
Enable Variable Shading | Checked/Unchecked | Enable/Disable Variable Shading. |
PerDraw VRS | 1x1, 1x2, 2x1, 2x2 | Shading rate value. Additional shading rates are 2x4, 4x2, 4x4. |
ShadingRateImage Enabled | Checked/Unchecked | Enable/Disable Tier 2 VRS control image. |
ShadingRateImage Combiner | Checked/Unchecked | The options for each combiner are: passthrough the previous state (i.e. disable the current stage), override (ignore previous stages), min, max and sum. |
VRS variance Threshold | 0.0 - 1.0 | Defines a value against which luminance variance gets compared in the compute shader generating the VRS image. |
VRS Motion Factor | 0.0 - 1.0 | Sets a factor by which the motion of the pixel since the last frame gets scaled to modify the shading rate. |
ShadingRateImage Overlay | Checked/Unchecked | Enable/Disable ShadingRateImage overlay, a debug image over the rendered scene. |
Setting up Variable Shading
The Variable Shading compute shader takes as input the linear color buffer produced by the geometry rendering passes, and motion vectors buffer produced before geometry rendering passes. Final VRS control image is written to output buffer passed from setup.
Include the interface for the backend of the VRS API.
C++:
#include <FidelityFX/host/ffx_vrs.h>
Create VRS context:
if (m_AllowAdditionalShadingRates) m_InitializationParameters.flags |= FFX_VRS_ALLOW_ADDITIONAL_SHADING_RATES;
m_InitializationParameters.shadingRateImageTileSize = m_FeatureInfoVRS.MaxTileSize[0]; ffxVrsContextCreate(&m_VRSContext, &m_InitializationParameters);
Set up dispatch parameters and dispatch:
FfxVrsDispatchDescription dispatchParameters = {}; dispatchParameters.commandList = ffxGetCommandList(pCmdList); ... FfxErrorCode errorCode = ffxVrsContextDispatch(&m_VRSContext, &dispatchParameters);
Sample controls and configurations
For sample controls, configuration, and FidelityFX Cauldron Framework UI element details, see Running the samples.