CTX Monitors Driver



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:

  1. Ctx Monitor Driver
  2. Ctx Monitor Driver
  3. CTX Monitors Drivers

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 includedThe PC-3000 Flash
Basic Package
The PC-3000 Flash
All-in-One Package
PC-3000 Flash Reader1 pc.1 pc.
USB 2.0 Cable1 pc.1 pc.
PC-3000 software1 pc.1 pc.
User manual1 pc.1 pc.
TSOP-48 Adapter1 pc.1 pc.
LGA/TLGA-52/60 (14x18) adapter1 pc.1 pc.
BGA-152 adapter1 pc.1 pc.
Multiboard Adapter1 pc.1 pc.
Monolith Module2 pc.2 pc.
LGA-52/TSOP-48 Module1 pc.1 pc.
BGA-152/VBGA-100 Module1 pc.1 pc.
Spider Board adapter1 pc.
TSOP-48 W (wide) adapter1 pc.
LGA/TLGA-52/60 (12x17) adapter1 pc.
BGA-152/132 adapter1 pc.
TSSOP-56 adapter1 pc.
VBGA-100 adapter1 pc.
Card Adapter1 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

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.

The main features of the Spider Board Adapter:
  • 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.


Multiboard Soldering Adapter with Replaceable Modules
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, 2020The 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:

  • PC-3000 Flash software Ver. 7.4.11

All authorized technical support users will get the latest software versions.

Read more...

October 08, 2019The new PC-3000 Flash software Ver. 7.3.7. is released!

The following English, Japanese, Korean and Chinese software update is released:


  • PC-3000 Flash software Ver. 7.3.7.

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, 2018The new PC-3000 Flash software Ver. 7.2.5. is available!

The following English software update is released:


  • PC-3000 Flash software Ver. 7.2.5.

Detailed list of enhancements:

What’s new?


  1. Special analysis algorithm has been added:
    • for PS8035, SM2685, SM2703 controllers with MLC memory: fully automated image assembling and update blocks arrangement
    • for PS8210 controllers with MLC memory: fully automated image assembling for single/dual-channel modes and update blocks arrangement
    • for AlcorMicro SD Type 1 (for monolith cases based on AU controller)
  2. Full screen mode for Bit Map (Bad Byte cutting mode) has been added.
  3. The new data preparation method has been added: 'Swap half-bytes'. This method can be used when the user needs to add ECC support that’s not included in the software (only if they differ by a sequence of half-bytes).

Follow the link below to see the detailed list of enhancements.

Read more...

November 09, 2017The new PC-3000 Flash software Ver. 7.1.1. is available!

The following English, Japanese and Chinese software update is released:

  • PC-3000 Flash software Ver. 7.1.1.

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, 2016The new PC-3000 Flash software Ver. 7.0.5 is available!
The main enhancements in PC-3000 Flash software ver. 7.0.5:
  • Introduced support for new sets of adapters:
    • New PC-3000 Flash Multiboard Adapters, including replaceable soldering modules: Monolith module, BGA152/VBGA100 module, LGA52/TSOP48 module.
    • New PC-3000 Flash Card Adapter.
  • Added a XOR map analysis tool for tasks on AU and SSS controllers. The tool enables you to solve tasks which have non-standard XOR applied on the basis of standard one.
  • Added a mode in compiler “Block Number SD/CF”, which allows to switch off add-on optimization. In other words, the mode does not sort all add-ons based on their relevance, but adds everything that is found during structure analysis.
  • Added methods of manual block rotation (page-by-page) in the “Block/Page Cutting” tool and implementation of the version into the translator. This is necessary to enable block rotation if it is in the translator version.
  • Optimized performance of the compiler “Block Number SM 3257” in relevant marker search mode.
  • Enhanced performance of the compiler “ITE 1167 translator”.
  • Completely rewritten the block rotation preparing tool for SD/CF Phison Controllers. Now TLC microchips with 32 sector page and sector merge cases for MLC memory are supported.
  • Added new XOR and ECC to database.
Read more...

April 22, 2016The new PC-3000 Flash software Ver. 7.0.4 is available!
The main enhancements in PC-3000 Flash software ver. 7.0.4:
  • Innostor controller block number image builder method has been improved
  • Sandisk controller block number image builder method has been improved (new controllers are supported now)
  • New tools for working with dumps are now available:
    • Page transformation for different ECC at the IS and SM controllers
    • Block rotation tool for SD and microSD cards based on the PHISON controllers
    • Search tool for the actual marker position for some types of tasks
    • New opportunity to change the map of XOR results by cut pages option (common problem at the SM and AU controllers) with Twoplane XOR mode
  • Image builder for SM-based SD and CF cards has been improved
  • It has become possible to save the user data with ECC errors into the !Problem folder
  • Dynamic XOR for the CBM controllers is now available
  • It has become possible to multi-retry a command in the direct command mode
  • A new preparation method with new special preparation tools is available
  • It has become possible to optionally change the order and location of the Hex, Map and Status tabs. When you choose a new configuration, it can be saved and applied automatically when you run the software next time
Read more...

December 04, 2015PC-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, 2015New 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, 2015The release of the new PC-3000 Flash software ver. 7.0.1
The new software update for the PC-3000 Flash is available now.
  • Explore the new opportunity to expand your PC-3000 Flash Reader functionality!
    It has become possible to make a firmware update of the PC-3000 Flash Reader.
    Detailed manual is available in your Personal Update Box.
  • The new preparation method 'Join by Dumps for N sources'
  • In the 'Page Designer' mode, you can select ranges of the same length by double click
  • The support of the pages larger than 128Kb
  • New types of ReadRetry options
  • New types of ECC
  • New types of XOR (SM325x, SM326x, SM268x, IS9xx, SSS669x, AU69xx, Sandisk, Kingston SD and others)
  • New translator algorithm for SSS5523 controller
  • New translator algorithm for some SanDisk controllers
  • New translator algorithm for Innostor (IS902, IS903, IS916) controllers
  • Updated dynamic XOR patterns for Phison controllers
  • New weekly-updated automatic database with new XOR, ECC, and other resources

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, 2014New version 6.5.1 of PC-3000 Flash SSD Edition is released
New features are available NOW! They are the following:
  • New memory chips with the 16-8 JEDEC and the 16-8 ONFI type of reading have been added
  • New XOR patterns and ECC types have been added
  • New analysis algorithm for the SSS6677 controller has been added
  • the PC-3000 UDMA-E appears in the hardware controller selection while launching the Active Utility mode
  • New ability for adding the user's own ECC description has been added (recommended only for advanced users)
  • New mode for adding elimination based on XOR has been added
  • the ECC auto detection tools have been improved
  • New synchronization method of the 'Block's sorting' has been added
  • Matching version mode has been seriously improved
  • A lot of different bug fixes and improvements in Kernel part of the PC-3000 Flash have been done

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, 2014PC-3000 Flash SSD Edition has got a new version 6.4.2
New features are available NOW! They are the following:
  • New data preparation method of 'XOR for page by page number'
  • New data preparation method of 'Copying in analysis result'
  • New driver version which is setup automatically in new version of PC-3000 Flash setup *.exe file
  • New memory chips support
  • New features in Active utilities for SSD recovery
  • New database resources
  • Bugfixes and improvements
All authorized technical support users can feel free to contact u for getting the latest version of PC-3000 Flash SSD Edition.
Read more...

November 25, 2013PC-3000 Flash SSD Edition has got a new version 6.4.
New features are available NOW! They are the following:
  • Full support of Intel SSD drive based on Postville controller (with solution for BAD_CTX, BAD_FW and NO_FW bugs)!
  • New Active Utility for Toshiba SSD drives based on JMF616 controllers
  • Translator for SM3257EN controllers family
  • A lot of new XOR, memory chips, ECC, and other resources!
  • New preparation options for modern flash drives
  • New algorithms for reading problem TLC/MLC chips
  • Serious improvements and optimizations of PC-3000 software components
All authorized technical support users can feel free to contact us for getting the latest version of PC-3000 Flash SSD Edition
Read more...

July 03, 2012A 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).

Driver

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.