- What's New?
- 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 SDK v2.0 Documentation ⧉
FidelityFX Luminance Preserving Mapper 1.4
What is FidelityFX Luminance Preserving Mapper?
The FidelityFX Luminance Preserving Mapper (LPM) is a tone mapping and gamut mapping solution for high dynamic range (HDR) and wide gamut content. FidelityFX LPM tone maps the luminance (luma) of the red-green-blue (RGB) pixel instead of the color itself, but ensures sure that the tonemap(luma(RGB))
would be very similar to the luma(tonemap(RGB))
, that is to say it preserves the luminance information of the pixel.
FidelityFX LPM off
FidelityFX LPM on
High-level overview:
FidelityFX LPM is split into two parts: a setup call and filter call.
The setup call writes pertinent data to a fixed size control block with regards to what the tone and gamut mapping calculations need, and the filter call reads from the control block, calculates, and outputs a tone and gamut mapped color value or pair of values for the FP16 version.
ffx_lpm.h
:
- A common header file for CPU-side setup of the mapper and GPU-side setup and tone and gamut map calculation functions.
LpmSetup()
is used to setup all the data required by mapper in a control block:- What is the content gamut.
- What is the display gamut.
- Max brightness value of content in RGB.
- Exposure steps above SDR/LDR 1.0
LPMFilter()
is used to do the calculations for mapper by reading data from the control block.- For detailed intructions please read the comments in
ffx_lpm.h
ffx_lpm.cpp
:
- CPU-side setup code for FidelityFX LPM.
- Select the right
LPM_config_*_*
andLPM_color_*_*
configurations based on content gamut and display mode selected.
ffx_lpm_filter.hlsl
:
- GPU-side call to do the tone and gamut mapping.
- Select right configurations of
LPM_config_*_*
based on content gamut and display mode selected.