The PC-3000 Flash is a hardware-software system intended for recovering data from NAND based devices in such cases where there is no access through the authorized drive interface:
Graphics driver (WDDM) The latest available graphics driver is strongly recommended, either from Windows Update or from the GPU vendor or PC manufacturer's website. For Windows 10, version 1903, and later, we recommend drivers that support at least Windows Display Driver Model (WDDM) version 2.6.
- After reading other customers reviews, I realized the M.2 slot shares with two of my SATA ports. I have six SATA ports so I move my current drives to other ports and all was well. I downloaded the latest Samsung NVMe driver (otherwise the card uses the window’s driver), Samsung Magician and Data Migration software.
- From Citrix Knowledgebase article CTX218217 Unable to span across multiple monitors after upgrade to 7.11 VDA, Black/Blank screen appears on the monitors while connecting to ICA session:. For VDA 7.11 and newer, calculate the video memory that is required for monitors using the following formula.
- UFD (USB Flash Drive)
- SD (Secure Digital Card)
- CF (Compact Flash)
- micro SD (micro Secure Digital Card)
- MS (Memory Stick)
- xD
- Monolithic Flash Devices
- MMC (Multi Media Card)
- Voice Recorder (dictaphone)
- iPhone 2G, 3G, 3GS (without hardware encryption)
Data recovery from USB drives, memory cards, mobile storage devices
The PC-3000 Flash is based on our own 'know-how' technology of getting direct access to Flash memory microchips. The microchip is desoldered from the storage device and read by our special device – the 'Flash reader' – providing access to data when the controller is damaged. This technology greatly increases the chances of successful data recovery even when the storage device is physically damaged.
The PC-3000 Flash contains an up-to-date large memory chip database that allows you to identify and read microchips in automatic mode. Complicated stack organizations which consist of several parts are automatically detected by the PC-3000 Flash as well.
NAND microchip technology is constantly changing: microchips are becoming more high-tech, new principles of functionality are created and new requirements and protocols for microchips appear, for example, TLC microchips. Because of this constant change, the Flash Reader software is continuously updated to provide support for new microchips in accordance with the strict requirements necessary for correct functionality.
The PC-3000 Flash is capable of automatically checking and downloading the latest libraries via the Internet:
- Memory chip library
- ECC algorithm library
- XOR library
- Library of Analysis algorithms, preparation and research methods
- Page format library
- Supply circuit library
- Rereading Modes reference book
- Dynamic XOR library
If there are any new resources, they are downloaded from the ACE Laboratory server and updated.
In addition to a great variety of manual and visual modes, the PC-3000 Flash has automatic data recovery methods which help solve both simple and difficult cases. For example, in most cases, Complex analysis allows for making all prior operations automatically and get access to user data.
With the PC-3000 Flash, you can recover data with 'one-click' using the PC-3000 Flash Solution Center. It is a dream come true for data recovery specialists!
The PC-3000 Flash Solution Center is updated daily!
The list of controllers supported by the 'PC-3000 Flash Solution Center' can be reviewed here
The PC-3000 Flash Packages
What’s included | The PC-3000 Flash Basic Package | The PC-3000 Flash All-in-One Package |
PC-3000 Flash Reader | 1 pc. | 1 pc. |
USB 2.0 Cable | 1 pc. | 1 pc. |
PC-3000 software | 1 pc. | 1 pc. |
User manual | 1 pc. | 1 pc. |
TSOP-48 Adapter | 1 pc. | 1 pc. |
LGA/TLGA-52/60 (14x18) adapter | 1 pc. | 1 pc. |
BGA-152 adapter | 1 pc. | 1 pc. |
Multiboard Adapter | 1 pc. | 1 pc. |
Monolith Module | 2 pc. | 2 pc. |
LGA-52/TSOP-48 Module | 1 pc. | 1 pc. |
BGA-152/VBGA-100 Module | 1 pc. | 1 pc. |
Spider Board adapter | 1 pc. | |
TSOP-48 W (wide) adapter | 1 pc. | |
LGA/TLGA-52/60 (12x17) adapter | 1 pc. | |
BGA-152/132 adapter | 1 pc. | |
TSSOP-56 adapter | 1 pc. | |
VBGA-100 adapter | 1 pc. | |
Card Adapter | 1 pc. |
Interface to connect Flash-Reader: USB 2.0
Supported types of memory chip covers:
- TSOP-48 (is included into the PC-3000 Flash Kit)
- LGA/TLGA-52 [14x18] (is included into the PC-3000 Flash Kit)
- BGA-152/132 (is included into the PC-3000 Flash Kit)
- Circuit Board (is included into the PC-3000 Flash Kit)
- LGA/TLGA-52 [12x17] (can be purchased separately)
- TSSOP-56 (can be purchased separately)
Memory chip reading speed: 5-15 МB/S. Determined by parameters of reading process and microchip architecture
Indicators:
- active state and status of the reader
- power supply on the circuit Vcc
- power supply on the circuit VccQ
Integrated Power Control Adapter parameters:
- the number of independent circuits: 2 (Vcc, VccQ);
- voltage range: 0.8 V - 3.6 V;
- voltage step: 0.05 V;
- source types: impulse or line - (can be selected by software);
- Limitation of current consumption: 150 mA, 200mA, 500mA, 1.5A, Unlimited;
- delays in buffer elements: 3 ns;
Supported types of controllers and memory chips:
- Supported types of controller chips
- Supported types of memory chips
Supported OS: Windows XP, Windows Vista, Windows 7, Windows 8, Windows 10; х86, х64
Recommended PC configuration:
CPU: Intel Core i5 (Quad Core)
RAM: 8GB
Storage configuration: RAID0 (strip) x2 HDD (7200 rpm) with total capacity of 1 TB
LCD Monitor: 22', 1920x1080
PC-3000 Flash System Functioning Principle
In a contemporary NAND-based flash drive we can roughly single out the following parts: interface, controller, memory chip, and internal drive firmware (microcode). The interface can be of any kind - SD, microSD, XD, USB 2.0 or USB 3.0 - and it is a linking unit between the controller and the 'outer world'. The controller processes the incoming data, makes some preparations, converts and mixes the data and prepares it for writing into the memory chip (backwards conversion will take place when the data is read). Memory chips store the received data (a drive may contain one or more than one memory chip). The drive's firmware operates the controller and the interface modes and it monitors the damaged memory cells of the microchips.The PC-3000 Flash System allows to diagnose a drive and to determine the essence of the problem. All malfunctions of solid-state drives can be divided into two groups:
Ctx Monitor Driver
logical (all units of the device and the microchip are working properly and without fail, but a problem occurs with the damaged file system, with the accidentally deleted files, with the data loss after formatting, etc. ) and physical (damage to electronic components or to firmware, resulting in a drive failure). Power stabilizers, the controller microchip or the drive's firmware located in the controller (or in the service area of the memory chips) are the most frequent reasons of failure.To resolve each of these problems, the PC-3000 Flash uses a particular set of its own tools and methods enabling to identify the malfunction and to get access to user data.
Logical problems of a NAND-based drive
If logical malfunction is detected at diagnosis, the drive doesn't require disassembling – it is enough to start the PC-3000 Flash software and use the following modes:
- Drive analysis enabling to find the existing partitions and to add virtual ones
- Analysis of the partition data enabling to scan the content of the drive and to find lost files and folders. The mode can be operated basing on the file system, but it can also be started in a configuration when the file system is ignored, and in this case EVERYTHING will be found
- The mode of RAW recovery allows to recover files and then group the recovered files by types
- Sector editor. Advanced users, who possess extended knowledge of file systems structure, have an opportunity to fully restore the drive's functionality and its performance
Physical problems of a NAND-based drive
Physical malfunctions of drives occur quite frequently. One the possible causes of malfunctions is the low quality of the drive's electronic components. There can be many other causes, such as incorrect exploitation, etc. In such cases, the controller is the faulty component, whereas the user data remains intact and it is located in the non-volatile memory chips. However, in case of such malfunction, the data can't be read in the standard mode via the device's interface.To resolve such problems, the PC-3000 Flash System uses a complex unit of software and hardware parts. The System's hardware part makes it possible to read any NAND-memory chips (at first, memory microchip should be unsoldered out of the drive and inserted into the reader of PC-3000 Flash). As soon as a file containing the data from memory chips is obtained, you can further work directly with the data you have read. It is almost impossible to damage the data, and so it is absolutely safe to use the PC-3000 Flash System, as you can go back to the initial dump of each microchip at any time. At the next stage, a set of mathematical tools and methods is used which enables to emulate the operation algorithm of almost any drive controller.
The software component encompasses the following features and functions:
- A reference base of memory microchips containing information about hundreds of memory microchips
- A resource base required to most controllers operation
- About 25 different preparation techniques emulating the controller transformations
- Around 50 different algorithms of obtaining a full-featured image of the file system
- View mode for service information
- Data view mode in bitwise graphic representation
- Several methods and algorithms to improve the previously built image
- An integrated compiler enabling you to write your own scripts to work with data
- Numerous other useful features
- Many other features and functions
All other modes and tools of the PC-3000 Flash provide a possibility to automatically determine the operation parameters and to apply them. To make the PC-3000 Flash easier to use, three ways of data recovery automation have been implemented:
- Controller-based recovery, an off-line base of possible steps for recovering user data
- A comprehensive method of analysis, a mode for mathematical calculation of the likeliest data recovery steps
- A Global Solution Centre – the website containing a base of over 4,500 solution scripts. When you apply these solutions, you get an opportunity to recover data “in one click”
Hardware features: PC-Flash Reader 4.0 device. NEW!
- Support a wide range of NAND devices using specialized adapters
- Completely automatic mode for chip reading and step-by-step manual mode that allows to send commands if requires
- Wide functionalities to supply voltage control and current restriction (see Technical features)
- Drivers for 32-bit and 64-bit operating systems
- Fully controlled and configurable in PC-3000 software
- Buffered control and the address/data bus outputs
Flash drives in the form of monoliths
A large percentage of contemporary NAND-based flash drives is made up by monolith drives (System on Chip, or Embedded Solution), where the controller, the memory microchips and all the passive elements are placed inside one physical case. The only external port for this kind of flash drives is the interface port which it is intended for (USB, SD, MS, Micro SD, etc.). If this kind of device has a malfunction and if it is impossible to work through the standard interface, there is a way of getting access to the internal memory chips inside the monolith device, using soldering to special pinouts situated on the circuit board or by direct soldering to the traces of the circuit board. Specifically for such tasks, the PC-3000 Flash System has a Circuit Board adapter, designed to make it more convenient to connect the monolith to the PC-3000 Flash System reader. The monolith library is regularly updated and it contains information about the soldering pinouts for getting connected to the monoliths' memory chips.Solutions System for the PC-3000 Flash
Monoliths Library
Supported types of controllers
Supported types of memory microchips
PC-3000 Flash adapters
Spider Board Adapter is designed to get connected to technological pins of monolithic Flash devices. This is the new revolutionary technique to recover data from damaged monoliths. No advanced soldering skills are required. |
- Doesn’t require soldering to the technological pinouts, which saves a lot of time, reduces risks and makes the monolith recovery process convenient like never before.
- 25 specialized needles will enable you to find a convenient way of connecting to pinouts, no matter how they are located
- GND and VCC pins are fixed by screw connectors for convenient usage
- The adapter is developed specifically for using with microscope
With the Spider Board Adapter it is possible to:
- Fine-tune the connectors on the software level
- Save the previous pinout settings in a file to use in similar cases
- Maintain constant 5V or control VCC (1.8 V-3.6 V) power supplies
- Control the adapter power supply via software
- Recover data from partially damaged/formatted/erased SD and MicroSD cards as a fully functional Card Adapter.
IMPORTANT:
The new adapter is only compatible with PC-3000 Flash Reader ver. 4.0.The Spider Board Adapter works with all monolith form factors:
- MicroSD
- SecureDigital
- UFD
- MemoryStick
Previously, many data recovery engineers did not work with monoliths because of complexity. Now you can recover data from monoliths much easier, faster and safer.
This adapter is designed for soldering NAND-chips in various form factors and connecting them to PC-3000 Flash Reader (Ver. 3 or 4). The new Multiboard Adapter supports a broader range of microchips. The device consists of a main Multiboard adapter and replaceable modules: Monolith, LGA-52/TSOP-48 and BGA-152/VBGA-100. This approach allows to quickly switch between tasks and solder microchips without the risk of damaging the adapter by heat. | |
It is much easier to solder on a small monolith module, which also has higher interference immunity and data reading stability. The Multiboard Adapter enables you to cut costs on each monolith case due to cheapness, convenience and stable reading quality of replaceable modules, saving time and increasing return on investment. | |
Main Multiboard adapter with a socket for replaceable modules | Monolith soldering replaceable module |
LGA-52/TSOP-48 soldering replaceable module | BGA-152/VBGA-100 soldering replaceable module |
LGA/TLGA-52/60 (14x18 and 12x17) Adapters
Adapters are based on the specialized ZIF panels, providing a convenient and secure method of installing memory chips. Adapters are fully compatible with the PC-Flash Reader version 3.0 and support the chips in LGA/TLGA-52/60 case. The difference is the width of the memory chip packages - 14x18 mm and 12x17 mm. It is possible to center manually a narrow chip (12x17 mm) inside the socket of LGA/TLGA-52/60 (14x18) adapter. The adapter has a power supply LED- indicating the voltage supplied to the memory chip.
BGA-152/132 Adapter
The adapter is based on the specialized ZIF panel, providing a convenient and secure method of installing memory chips. The adapter is fully compatible with the PC-Flash Reader version 3.0 and supports the chips in BGA-152/132 case. BGA-132 chips require the additional alignment, as their body is 2 mm less in the width. Two voltage indicators for every power circuit (core supply Vcc and buffer supply VccQ) allow to monitor the power voltage supply of the every circuit using the additional power supply adapter. When there is no such power supply adapter, both circuits are connected to the PC-Flash Reader. |
VBGA-100 Adapter
The adapter is based on the specialized ZIF panel, providing a convenient and secure method of installing memory chips. The adapters is fully compatible with the PC-Flash Reader ver. 3.0/ver.4.0 and supports the chips in VBGA-100 case. LED allows you to visually monitor the voltage supply submitted to the memory chip. |
TSOP-48 and TSOP-48 W (wide) Adapters
The TSOP-48 and TSOP-48 W (wide) Adapters are based on the specialized ZIF panel, providing a convenient and secure method of installing memory chips. The adapters are fully compatible with the PC-Flash Reader ver. 3.0/ver.4.0 and supports the chips in TSOP-48 case. LED allows you to visually monitor the voltage supply submitted to the memory chip. The TSOP-48 W (Wide) Adapter also supports the off-standard sized TSOP-48 memory chips which are wider than standard 14x18mm. |
While working with monoliths soldering is highly effective, it should be the last resort for a data recovery engineer. Before turning to this sophisticated process, safer and cheaper solutions should be used - like Card Adapter for PC-3000 Flash. The Card Adapter has been developed for reading out data from SD, microSD memory cards and MMC, eMMC chips in technological mode. Technomode makes it possible to access data on the problematic card without disassembling it, which saves engineer’s time and makes the task more cost-effective. | |
This makes working with memory cards much more convenient and greatly facilitates forensic investigations. The adapter is connected to PC-3000 Flash Reader Ver. 3 or 4 (Flash Reader Ver. 3 requires Power Supply Adapter) and has two slots for SD and microSD cards as well as soldering area for MMC/eMMC chips, frequently used in mobile devices and smartphones. |
Some Compact Flash cards and USB Flash sticks can be based on the TSSOP-56 chips. The ACE Lab TSSOP-56 adapter, which is fully compatible with the PC-Flash Reader ver. 3.0/ver.4.0, allows reading data from this type of the NAND Memory chips. The adapter is included into the PC-3000 Flash All-in-One Package or can be purchased separately. |
May 14, 2020 | The PC-3000 Flash Software Update 7.4.11 is now available! |
Data recovery engineers and digital forensics experts consider the PC-3000 Flash as the tool №1 when it comes to extracting data/evidence from damaged NAND Flash devices. It is the only solution that completely supports many drive brands, e.g. SanDisk, new Phison, or SiliconMotion, so you can get file systems, and separate files both. Now we have expanded the list of supported storage media by adding 9 types of translators for SanDisk 8sec, 2 subtypes of translators for SM2704, and have improved algorithms for PS8210. Also, you can now edit the solution before implementing it and reproduce the result in the transformation graph form that increases the efficiency of the solutions. All these features and many others are now available with the following English, Japanese, Korean and Chinese software update:
All authorized technical support users will get the latest software versions. | |
Read more... |
October 08, 2019 | The new PC-3000 Flash software Ver. 7.3.7. is released! |
The following English, Japanese, Korean and Chinese software update is released:
Now you can significantly improve the resulting quality of recovery from UFD / SD / microSD cards based on SanDisk technology with the Translator algorithm method “SanDisk 8 sec”, manually select the most suitable candidates from the list of blocks with a visual method for constructing the virtual image based on the file system, and much more! All authorized technical support users will get the latest software versions. Please contact us to learn more on how to become an authorized technical support user and receive all of the recent PC-3000 Software Updates. | |
Read more... |
July 11, 2018 | The new PC-3000 Flash software Ver. 7.2.5. is available! |
The following English software update is released:
Detailed list of enhancements:What’s new?
Follow the link below to see the detailed list of enhancements. | |
Read more... |
November 09, 2017 | The new PC-3000 Flash software Ver. 7.1.1. is available! |
The following English, Japanese and Chinese software update is released:
New 'Intelligent ReRead mode', New algorithm of 'ReadRetry mode checking', PC-3000 Resource manager (XOR, ECC, Page transformations, Chips ID, reading rules, ReadRetry types) and much more! On the top of that, most of the tasks are now performed in the background. Follow the link below to see the detailed list of enhancements. | |
Read more... |
December 08, 2016 | The new PC-3000 Flash software Ver. 7.0.5 is available! |
The main enhancements in PC-3000 Flash software ver. 7.0.5:
| |
Read more... |
April 22, 2016 | The new PC-3000 Flash software Ver. 7.0.4 is available! |
The main enhancements in PC-3000 Flash software ver. 7.0.4:
| |
Read more... |
December 04, 2015 | PC-3000 Flash software Ver. 7.0.3 is available now |
The following English software update is released: PC-3000 Flash software Ver. 7.0.3 In this release, the PC-3000 Flash software has been optimized for working both with the Reader Ver.4.0 and Ver. 3.0. A lot of new useful features have been introduced. | |
Read more... |
July 29, 2015 | New PC-3000 Flash software ver. 7.0.2 is released |
Not much time has passed since PC-3000 Flash software ver. 7.0.1 became available, and the ACE Lab Team is ready with one more new release. In the latest version, the PC-3000 Flash users will get the new TOOLS, which automate the routine operations helping to save your time. | |
Read more... |
April 27, 2015 | The release of the new PC-3000 Flash software ver. 7.0.1 |
The new software update for the PC-3000 Flash is available now.
All authorized technical support users will be able to get the latest software version for their PC-3000 Flash. Please contact us to find out how to become an authorized technical support user. | |
Read more... |
May 15, 2014 | New version 6.5.1 of PC-3000 Flash SSD Edition is released |
New features are available NOW! They are the following:
For all new users we recommend visiting our F.A.Q. in PC-3000 Flash NAND Forum, where you can find a lot of useful information about the PC-3000 Flash functionality. All authorized technical support users can feel free to contact us for getting the latest version of the PC-3000 Flash SSD Edition. | |
Read more... |
February 04, 2014 | PC-3000 Flash SSD Edition has got a new version 6.4.2 |
New features are available NOW! They are the following:
| |
Read more... |
November 25, 2013 | PC-3000 Flash SSD Edition has got a new version 6.4. |
New features are available NOW! They are the following:
| |
Read more... |
July 03, 2012 | A new revolutionary approach for handling dead SSD in the version 6.0.1! |
Read more... |
-->
This topic provides a technical overview of outputting high dynamic range (HDR) Direct3D 11 and Direct3D 12 content to an HDR10 display using Windows 10 advanced color support. It summarizes some key conceptual differences between outputting to HDR10 displays as compared to traditional standard dynamic range (SDR) displays. It also covers the key technical requirements for your app to properly support Windows advanced color, as well as recommendations and best practices.
Introduction
Windows 10 supports HDR and other advanced color displays, which provide significantly higher color fidelity than traditional SDR displays. You can use Direct3D, Direct2D and other graphics APIs to render HDR content to a capable display.
Windows advanced color refers to several related technologies, first introduced with Windows 10 version 1703, that provide support for displays that exceed the color capabilities of traditional standard dynamic range (SDR) displays. The three major extended capabilities are described below. The most common type of advanced color display, HDR10, supports all three extended capabilities.
high dynamic range
Dynamic range refers to the difference between the maximum and minimum luminance in a scene; this is often measured in nits (candelas per square centimeter). Real world scenes, such as this sunset, often have dynamic ranges of 10 orders of magnitude of luminance; the human eye can discern an even greater range after adaptation.
Ever since Direct3D 9, graphics engines have been able to internally render their scenes with this level of physically accurate fidelity. However, a typical standard dynamic range display can reproduce only a little more than 3 orders of magnitude of luminance, and therefore any HDR-rendered content had to be tonemapped (compressed) into the limited range of the display. New HDR displays, including those that comply with the HDR10 (BT.2100) standard, break through this limitation.
Wide color gamut with automatic system color management
Color gamut refers to the range and saturation of hues that a display can reproduce. The most saturated natural color the human eye can perceive is pure, monochromatic light such as what is produced by a laser. However, mainstream consumer displays can often reproduce colors only within the sRGB gamut, which represents only about 35% of all human-perceivable colors. The diagram below is a representation of the human 'spectral locus', or all perceivable colors (at a given luminance level), where the smaller triangle is the sRGB gamut.
High end, professional PC displays have long supported color gamuts that are significantly wider than sRGB, such as Adobe RGB and D65-P3. And these wide gamut displays are becoming more common. However, prior to advanced color, Windows didn't perform any system-level color management for applications. This meant that if a DirectX app rendered, for example, a pure red or RGB(1.0, 0.0, 0.0) to its swap chain, then Windows would simply scan out the most saturated red that the display could reproduce, regardless of what the actual color gamut of the display was.
Apps that needed high color accuracy could query the color capabilities of the display (for example, using ICC profiles), and perform their own in-process color management to correctly target the display's color gamut. However, the vast majority of apps and visual content assume that the display is sRGB, and they rely on the operating system to fulfill this assumption.
Windows advanced color adds automatic system-level color management. The Desktop Window Manager (DWM) is Windows' compositor. When advanced color is enabled, the DWM performs an explicit color conversion from the app visual content's colorspace to a canonical composition color space, which is scRGB. Windows then color-converts the composed framebuffer content to the display's native color space. In this way, traditional sRGB content automatically gets color-accurate behavior, while advanced color-aware apps can take advantage of the full color capabilities of the display.
Deep precision/bit depth
Numerical precision, or bit depth, refers to representing or distinguishing between similar but distinct colors without banding nor artifacts. Mainstream PC displays support 8 bits per color channel, while the human eye requires at least 10-12 bits of precision to avoid perceivable distortions, without resorting to techniques such as dithering or depending on viewing conditions.
Prior to advanced color, the DWM restricted windowed apps to output content at only 8 bits per color channel, even if the display supported a higher bit depth. When advanced color is enabled, the DWM performs its composition using IEEE half-precision floating point (FP16), eliminating any bottlenecks, and allowing the full precision of the display to be used.
System Requirements
Operating system (OS)
Advanced color support first shipped with Windows 10, version 1703, and it has been significantly improved with each update. This topic assumes that your app is targeting Windows 10, version 1903, or later.
Display
To take advantage of high dynamic range, you must have a display that supports the HDR10 standard. Windows works best with displays that are VESA DisplayHDR certified.
Graphics processor (GPU)
A recent GPU is required. To support HDR10 displays, Windows 10 requires one of the following.
- Nvidia GeForce 1000 series (Pascal), or newer
- AMD Radeon RX 400 series (Polaris), or newer
- Selected Intel Core 7 series (Kaby Lake), or newer
Note that additional hardware requirements apply depending on the scenarios, including hardware codec acceleration (10 bit HEVC, 10 bit VP9, etc.) and PlayReady support (SL3000). Contact your GPU vendor for more specific information.
Graphics driver (WDDM)
The latest available graphics driver is strongly recommended, either from Windows Update or from the GPU vendor or PC manufacturer's website. For Windows 10, version 1903, and later, we recommend drivers that support at least Windows Display Driver Model (WDDM) version 2.6.
Supported rendering APIs
Windows 10 supports a wide variety of rendering APIs and frameworks. Advanced color support fundamentally relies on your app being able to perform modern presentation using either DXGI or the Visual Layer APIs.
Therefore, any rendering API that can output to one of these presentations methods can support advanced color. This includes but is not limited to these.
- Win2D
- Requires using the lower level CanvasSwapChain or CanvasSwapChainPanel APIs.
- Windows.UI.Input.Inking
- Supports custom dry ink rendering using DirectX.
- XAML
- Supports playback of HDR videos using MediaPlayerElement.
- Supports decode of JPEG XR images using Image element.
- Supports DirectX interop using SwapChainPanel.
Handling dynamic display capabilities
Windows 10 supports an enormous range of advanced color-capable displays, from power-efficient integrated panels to high end gaming monitors and TVs. Windows users expect that your app will seamlessly handle all of these variations, including ubiquitous existing SDR displays.
Windows 10 provides control over HDR and advanced color capabilities to the user. Your app must detect the current display's configuration, and respond dynamically to any changes in capability. This could occur for many reasons, for example, because the user enabled or disabled a feature, or moved the app between different displays, or the system's power state changed.
Universal Windows Platform (UWP) apps
If you're writing a UWP app, regardless of the graphics rendering API you're using, use AdvancedColorInfo to get display capabilities. Obtain an instance of AdvancedColorInfo from DisplayInformation::GetAdvancedColorInfo.
To check what advanced color kind is currently active, use the CurrentAdvancedColorKind property. In Windows 10, version 1903, and later, this returns one of three possible values: SDR, WCG, or HDR. This is the most important property to check, and you should configure your render and presentation pipeline in response to the active kind.
To check what advanced color kinds are supported, but not necessarily active, call IsAdvancedColorKindAvailable. You could use this information, for example, to prompt the user to navigate to the Windows Settings app so that they can enable HDR or WCG.
The other members of AdvancedColorInfo provide quantitative information about the panel's physical color volume (luminance and chrominance), corresponding to SMPTE ST.2086 static HDR metadata. You should use this information to configure your app's HDR tonemapping and gamut mapping.
To handle changes in advanced color capabilities, register for the AdvancedColorInfoChanged event. This event is raised if any parameter of the display's advanced color capabilities changes for any reason.
Handle this event by obtaining a new instance of AdvancedColorInfo, and checking which values have changed.
Desktop (Win32) DirectX apps
If you're writing a Win32 app, and using DirectX to render, then use DXGI_OUTPUT_DESC1 to get display capabilities. Obtain an instance of this struct via IDXGIOutput6::GetDesc1.
To check what advanced color kind is currently active, use the ColorSpace property, which is of type DXGI_COLOR_SPACE_TYPE, and contains one of the following values:
- DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709, SDR
- DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020, HDR
Note
Other advanced color kinds such as WCG are treated as SDR by DXGI. You can't use DXGI to identify a WCG display.
Note
DXGI doesn't let you check what advanced color kinds are supported but not active at the moment.
Most of the other members of DXGI_OUTPUT_DESC1 provide quantitative information about the panel's physical color volume (luminance and chrominance), corresponding to SMPTE ST.2086 static HDR metadata. You should use this information to configure your app's HDR tonemapping and gamut mapping.
Win32 apps don't have a native mechanism to respond to advanced color capability changes. Instead, if your app uses a render loop, then you should query IDXGIFactory1::IsCurrent with each frame. If it reports FALSE, then you should obtain a new DXGI_OUTPUT_DESC1, and check which values have changed.
In addition, your Win32 message pump should handle the WM_SIZE message, which indicates that your app may have moved between different displays.
Note
To obtain a new DXGI_OUTPUT_DESC1, you must obtain the current display. However, you should not call IDXGISwapChain::GetContainingOutput. This is because swap chains will return a stale DXGI output once DXGIFactory::IsCurrent is false, and recreating the swap chain to get a current output results in a temporary black screen. Instead, we recommend that you enumerate through the bounds of all DXGI outputs, and determine which one has the greatest intersection with your app window's bounds.
Ctx Monitor Driver
The following code example comes from the DirectX-Graphics-Samples repository.
Setting up Your DirectX swap chain
Once you have determined that the display currently supports advanced color capabilities, configure your swap chain as follows.
Use a flip presentation model effect
When creating your swap chain using the CreateSwapChainFor[Hwnd|Composition|CoreWindow] methods, you must use the DXGI flip model by selecting either the DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL or DXGI_SWAP_EFFECT_FLIP_DISCARD option, which makes your swap chain eligible for advanced color processing from DWM and various fullscreen optimizations. For more information, refer to the For best performance, use DXGI flip model topic.
CTX Monitors Drivers
Option 1. Use FP16 pixel format and scRGB color space
Windows 10 supports two main combinations of pixel format and color space for advanced color. Select one based on your app's specific requirements.
For general-purpose apps, when creating your swap chain we recommend specifying DXGI_FORMAT_R16G16B16A16_FLOAT. That's also known as FP16 in your DXGI_SWAP_CHAIN_DESC1. By default, a swap chain created with a floating point pixel format is treated as if it uses the DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709 color space, which is also known as scRGB.
This combination provides you with the numeric range and precision to specify almost any physically possible color, and perform arbitrary processing including blending. In addition, if you're using Direct2D, Win2D, or Windows.UI.Composition, then this is the only supported combination for any swap chain or intermediate target that contains advanced color content.
The main tradeoff of this option is that it consumes 64 bits per pixel, which doubles GPU bandwidth and memory consumption compared to the traditional UINT8 SDR pixel formats. In addition, scRGB uses numeric values that are outside the normalized [0, 1] range to represent colors that are outside the sRGB gamut and/or greater than 80 nits of luminance. For example, scRGB (1.0, 1.0, 1.0) encodes the standard D65 white at 80 nits; but scRGB (12.5, 12.5, 12.5) encodes the same D65 white at a much brighter 1000 nits. Some graphics operations require a normalized numeric range, and you must either modify the operation, or re-normalize color values.
Option 2: Use UINT10/RGB10 pixel format and HDR10/BT.2100 color space
For apps that consume HDR10-encoded content, such as media players, or apps that are expected to be used mainly in fullscreen scenarios such as games, when creating your swap chain you should consider specifying DXGI_FORMAT_R10G10B10A2_UNORM in DXGI_SWAP_CHAIN_DESC1. By default, this is treated as using the sRGB color space; therefore, you must explicitly call IDXGISwapChain3::SetColorSpace1, and set as your color space DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020, also known as HDR10/BT.2100.
This combination has more stringent restrictions than FP16. You can use this only with Direct3D 11 or Direct3D 12. In addition, UINT10/HDR10 has limitations as an intermediate format because it uses the ST.2084 EOTF ('gamma' function), which is highly nonlinear, and optimized as a wire format, and because it offers only 2 bits of alpha.
However, this combination can offer powerful performance optimizations when used in your app's final output. It consumes the same 32 bits per pixel as traditional UINT8 SDR pixel formats. In addition, in certain fullscreen scenarios, the OS can optimize performance by directly scanning out the HDR10 surface.
Using an advanced color swap chain when the display is in SDR mode
You can use an advanced color swap chain even if the display doesn't support some or all of the advanced color capabilities your content requires. In those cases, the Desktop Window Manager (DWM) will downconvert your content to fit the display's capabilities. In Windows 10, version 1903, and later, it will perform numeric clipping; for example, if you render to an FP16 scRGB swap chain, then everything outside of the [0, 1] numeric range is clipped.
This downconversion behavior will also occur if your app window is straddling two or more displays with differing advanced color capabilities. AdvancedColorInfo and IDXGIOutput6 are abstracted to report only the 'main' display's characteristics (defined as the display containing the center of the window).
Correctly render SDR content with SDR reference white level
In many scenarios, your app will want to render both SDR and HDR content; for example, rendering subtitles or transport controls over HDR video, or UI into a game scene. It is important to understand the concept of SDR reference white level to ensure that your SDR content looks correct on an HDR display.
Windows treats HDR content as scene-referred, meaning that a particular color value should be displayed at a specific luminance level; for example, scRGB (1.0, 1.0, 1.0) and HDR10 (497, 497, 497) both encode exactly D65 white at 80 nits luminance. Meanwhile, SDR content traditionally has been output-referred (or display-referred), meaning that its luminance is left up to the user or the device; for example sRGB (1.0, 1.0, 1.0) encodes D65 white as in the HDR examples, but at whatever maximum luminance the display is configured for. Windows allows the user to adjust the SDR reference white level to their preference; this is the luminance that Windows will render sRGB (1.0, 1.0, 1.0) at. On desktop HDR monitors, SDR reference white levels are typically set to around 200 nits.
Note
On a display that supports a brightness control, such as on a laptop, Windows will also adjust the luminance of HDR (scene-referred) content to match the user's desired brightness level, but this is invisible to the app. Unless you're trying to guarantee bit-accurate reproduction of the HDR signal, you can generally ignore this.
If your app always renders SDR and HDR to separate surfaces, and relies on OS composition, then Windows will automatically perform the correct adjustment to boost SDR content to the desired white level. For example, if your app uses XAML and renders HDR content to its own SwapChainPanel.
However, if your app performs its own composition of SDR and HDR content into a single surface, then you're responsible for performing the SDR reference white level adjustment yourself. Otherwise the SDR content might appear too dim assuming typical desktop viewing conditions. First, you must obtain the current SDR reference white level, and then you must adjust the color values of any SDR content you're rendering.
Step 1. Obtain the current SDR reference white level
Currently, only UWP apps can obtain the current SDR reference white level via AdvancedColorInfo.SdrWhiteLevelInNits. This API requires a CoreWindow.
Step 2. Adjust color values of SDR content
Windows defines the nominal, or default, reference white level at 80 nits; therefore if you were to render a standard sRGB (1.0, 1.0, 1.0) white to an FP16 swap chain, it would be reproduced at 80 nits luminance. In order to match the actual user-defined reference white level, you must adjust SDR content from 80 nits to the level specified via AdvancedColorInfo.SdrWhiteLevelInNits.
If you're rendering using FP16 and scRGB, or any color space that uses linear (1.0) gamma, then you can simply multiply the SDR color value by AdvancedColorInfo.SdrWhiteLevelInNits / 80. If you're using Direct2D, there is a predefined constant D2D1_SCENE_REFERRED_SDR_WHITE_LEVEL, which has a value of 80.
If you're rendering using a nonlinear gamma color space such as HDR10, then performing SDR white level adjustment is more complex; if you're writing your own pixel shader you should consider converting into linear gamma to apply the adjustment.
Adapt HDR content to the display's capabilities using tonemapping
HDR and advanced color displays vary greatly in terms of their capabilities. For example, the minimum and maximum luminance and the color gamut they are capable of reproducing. In many cases, your HDR content will contain colors that exceed the display's capabilities. For the best image quality it is important for you to perform HDR tonemapping, essentially compressing the range of colors to fit the display while best preserving the visual intent of the content.
The most important single parameter to adapt for is max luminance, also known as MaxCLL (content light level); more sophisticated tonemappers will also adapt min luminance (MinCLL) and/or color primaries.
Step 1. Get the display's color volume capabilities
Universal Windows Platform (UWP) apps
Use AdvancedColorInfo to get the display's color volume.
Win32 (desktop) DirectX apps
Use DXGI_OUTPUT_DESC1 to get the display's color volume.
Step 2. Get the content's color volume information
Depending on where your HDR content came from, there are multiple potential ways to determine its luminance and color gamut information. Certain HDR video and image files contain SMPTE ST.2086 metadata. If your content was rendered dynamically, then you may be able to extract scene information from the internal rendering stages, for example the brightest light source in a scene.
A more general but computationally expensive solution is to run a histogram or other analysis pass on the rendered frame. The Direct2D advanced color images SDK sample demonstrates how to do this using Direct2D; the most relevant code snippets are included below:
Step 3. Perform the HDR tonemapping operation
Tonemapping is inherently a lossy process, and can be optimized for a number of perceptual or objective metrics, so there is no one standard algorithm. Windows provides a built-in HDR tonemapper effect as part of Direct2D as well as in the Media Foundation HDR video playback pipeline. Some other commonly used algorithms include ACES Filmic, Reinhard, and ITU-R BT.2390-3 EETF (electrical-electrical transfer function).
A simplified Reinhard tonemapper operator is shown below.
Additional resources
- Using HDR Rendering with the DirectX Tool Kit for DirectX 11 / DirectX 12. Walkthrough of how to add HDR support to a DirectX app using the DirectX Tool Kit (DirectXTK).
- Direct2D advanced color images SDK sample. UWP SDK sample implementing an advanced color-aware HDR and WCG image viewer using Direct2D. Demonstrates the full range of best practices for UWP apps, including responding to display capability changes and adjusting for SDR white level.
- Direct3D 12 HDR desktop sample. Desktop SDK sample implementing a basic Direct3D 12 HDR scene.
- Direct3D 12 HDR UWP sample. UWP equivalent of the above sample.
- Xbox ATG SimpleHDR PC sample. Desktop SDK sample implementing a basic Direct3D 11 HDR scene.