dynamic range
color gamut
precision
+
+
dynamic range
color gamut
precision
dynamic range
color gamut
precision
300 nits peak lumi.
sRGB color primaries
8 bits per channel
Stay tuned!
This video covers these APIs
Pixel format
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Red
Green
Blue
Alpha
Colorspace
RGB(0, 120, 215) =
in the sRGB colorspace
Option 1: FP16 + scRGB
Option 2: R10G10B10A2 + HDR10
Option 1: FP16 + scRGB
This is important!
Option 2: R10G10B10A2 + HDR10
ComPtr<IDXGIFactory2> factory;
// Initialized elsewhere
DXGI_SWAP_CHAIN_DESC1 swapchainDesc = {};
swapchainDesc.Format = DXGI_FORMAT_R16G16B16A16_FLOAT;
...
// Set pixel format
ComPtr<IDXGISwapChain1> swapchain;
ThrowIfFailed(factory->CreateSwapChainForCoreWindow(
...
&swapchainDesc,
&swapchain));
// Create swapchain
ComPtr<IDXGISwapChain4> swapchain4;
swapchain.As(&swapchain4);
// QueryInterface
swapchain4->SetColorSpace1(DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709);
// Set colorspace
Display performance:
AC visual assets
AC render pipeline
AC display output
SwapChain
Detect display capabilities
ComPtr<IDXGIFactory1> factory;
ComPtr<IDXGISwapChain> swapchain;
// Initialized elsewhere
// Initialized elsewhere
if (!factory->IsCurrent()) {
CreateDXGIFactory2(0 /* flags */, IID_PPV_ARGS(&factory));
}
// Ensure DXGI factory is valid
ComPtr<IDXGIOutput> output;
swapchain->GetContainingOutput(&output);
// Get DXGI output
ComPtr<IDXGIOutput6> output6;
output.As(&output6);
// QueryInterface
DXGI_OUTPUT_DESC1 outputDesc;
output6->GetDesc1(&outputDesc);
// Get display desc
// DXGI_OUTPUT_DESC1 contains all key display color performance values
typedef struct DXGI_OUTPUT_DESC1
{
...
UINT BitsPerColor;
DXGI_COLOR_SPACE_TYPE ColorSpace;
// Display colorspace
FLOAT
FLOAT
FLOAT
FLOAT
// Color gamut
RedPrimary[2];
GreenPrimary[2];
BluePrimary[2];
WhitePoint[2];
FLOAT MinLuminance;
FLOAT MaxLuminance;
FLOAT MaxFullFrameLuminance;
};
// Precision
// Dynamic range
DDS BC6H
JPEG XR
OpenEXR
JPEG w/ ICC profile
// Use Windows Imaging Component to load a JPEG XR image into Direct2D
ComPtr<ID2D1DeviceContext2> context;
ComPtr<IWICImagingFactory> factory;
ComPtr<IStream> stream;
// Initialized elsewhere
// Initialized elsewhere
// Initialized elsewhere
ComPtr<IWICBitmapDecoder> decoder;
ComPtr<IWICBitmapFrameDecode> frame;
factory->CreateDecoderFromStream(stream.Get(), ..., &decoder);
decoder->GetFrame(0, &frame);
// Create WIC decoder
// WIC detects codec from the stream
// JPEG XR has 1 frame
ComPtr<IWICFormatConverter> converter;
factory->CreateFormatConverter(&converter);
converter->Initialize(frame.Get(),
GUID_WICPixelFormat64bppPRGBAHalf, ...);
ComPtr<ID2D1ImageSourceFromWic> d2dImage;
context->CreateImageSourceFromWic(converter.Get(), &d2dImage);
// Ensure FP16 pixel format
// Create D2D image source
Resources and links
aka.ms/esmdsk
aka.ms/nokc3a
aka.ms/m39e01
aka.ms/ds3xd7
aka.ms/lxde6g
github.com/Microsoft/Win2D
github.com/Microsoft/DirectXTex
© Copyright 2026 Paperzz