What Is 10-Bit (And 12-Bit) Color?

So, 10-bit color: It's important and new, but...what is it? Before we dive into that, the first question is what is bit depth, and why does it matter for displays?

What Is Bit Depth

Latest Videos FromTom's Hardware
TOPICS
  • abtocool
    I find this article of poor quality, not-clear-enough, too many words were used to express few things.
    Reply
  • bit_user
    The point about underflow is an unhelpful digression. If we're talking about unsigned, unbiased integers, then no amount of bits will avoid that problem. An example using overflow would've been slightly more relevant.

    Why not just use the stair step analogy? It's simple and easy to understand.

    The example that uses 8-bit indexed color is misleading. Most people don't know about indexed color and would confuse 8 bits per pixel with 8 bits per channel (i.e. the 24-bit example).
    Reply
  • cia1413
    I don't think you are understanding the use of a look up table, LUT. A LUT is used to correct an the color of an image. The reason you use a LUT on an Eizo is because you can easily add color correction, used a lot of the time to just change the feel of a image, and quickly apply it to the output of the monitor. Its not used as a "trick" to make the image look better, just a tool to change it.
    Reply
  • abtocool
    Hey, isn't the LUT table basically a database of colors (running into billions) and the whole idea is that the monitor processor doesn't need to process which color to produce each time, and just look it up (recall) from the LUT table?

    a 14bit LUT (Benq/Viewsonic) table generates 4.39 trillion colors, which are then used to cherry pick 1.07 billion colors (10bit), and produce appropriate colors.


    Reply
  • koga73
    Another benefit to 8-bits per channel is it fits nicely into a 32-bit value. ARGB = 8-bits per channel x 4 channels (A is Alpha for transparency). 10 or 12-bit color values wouldn't work with 32-bit applications. Assuming your applications are 64-bit you could go up to 16-bits per channel (16 x 4 = 64).
    Reply
  • cia1413
    20951176 said:
    Hey, isn't the LUT table basically a database of colors (running into billions) and the whole idea is that the monitor processor doesn't need to process which color to produce each time, and just look it up (recall) from the LUT table?

    a 14bit LUT (Benq/Viewsonic) table generates 4.39 trillion colors, which are then used to cherry pick 1.07 billion colors (10bit), and produce appropriate colors.


    No, its a way to modify color to display them in a new way. You make a LUT to correct for an error in a displays light curve or to add a "look" like make it blue and darker to emulate night time.
    Reply
  • bit_user
    20951594 said:
    Another benefit to 8-bits per channel is it fits nicely into a 32-bit value.
    That's a separate matter from what the display actually supports and how the data is transmitted to it.

    20951594 said:
    10 or 12-bit color values wouldn't work with 32-bit applications.
    Of course it can work. It just doesn't pack as densely or easily as 8 bits per channel.

    Moreover, 3D rendering typically uses floating-point formats to represent colors. It's only at the end that you'd map it to the gamut and luminance range supported by the display.
    Reply
  • TripleHeinz
    20952597 said:
    20951594 said:
    Another benefit to 8-bits per channel is it fits nicely into a 32-bit value.
    That's a separate matter from what the display actually supports and how the data is transmitted to it.

    20951594 said:
    10 or 12-bit color values wouldn't work with 32-bit applications.
    Of course it can work. It just doesn't pack as densely or easily as 8 bits per channel.

    Moreover, 3D rendering typically uses floating-point formats to represent colors. It's only at the end that you'd map it to the gamut and luminance range supported by the display.

    I was about to answer something similar but you nailed it first and perfectly.

    I understand that all this is about the convenient packiness of a color in a 32bit value.

    D3D9 was able to work extensively with 32bit unsigned integer formats for color representation. But current APIs use normalized (between 0 and 1) 32bit floating point units to represent a color, then internally the GPU uses the floating point data to convert and pack to the output format. I think this is an awesome way to do it and virtually compatible with any format.

    A 32bit application can perfectly work and represent a 10 and 12 bit color value. A 32bit system can perfectly work with 64 bit values. Even more, in the case of the x86 architecture, it supports an 80bit extended precision floating point unit in hardware.
    Reply
  • TripleHeinz
    There is this option in the nvidia control panel to output 8bpc or 12bpc to the display. The 12bpc option is available when using a fairly new panel but it is not when using an old one. Does it mean that my monitor has a panel that supports 12 bit colors or is it something else?

    I honestly doubt that my panel is a super duper 12bit one. It came from a questionable OEM and brand, but color and contrast have always looked really well though.
    Reply
  • bit_user
    20952754 said:
    Even more, in the case of the x86 architecture, it supports an 80bit extended precision floating point unit in hardware.
    Ah, sad but true. Support for this exists in the x87 FPU, but not in SSE or AVX. I thought I ran across 128-bit float or int support, in some iteration of SSE or maybe AVX, but I'm not finding it.

    The other thing that x87 had was hardware support for denormals. If you enable denormal support in SSE (and presumably AVX), it uses software emulation and is vastly slower. Also, x87 had instructions for transcendental and power functions.

    Lastly, sort of one cool thing about x87 is that it's stack based - like a RPN calculator. I think that's one of the reasons it got pushed aside by SSE - that it's probably not good for pipelined, superscalar, out-of-order execution. But, still kinda cool.

    If you're fond of over-designed, antique machinery, the nearly 4 decade-old 8087 is probably a good example.

    https://en.wikipedia.org/wiki/Intel_8087
    Reply