10-bit Monitors

Started by
4 comments, last by Erik Rufelt 10 years ago

Hello

There are new monitors on the market that support 10-bits per channel. But in CAPS I can only find support for D3DFMT_X8R8G8B8 and D3DFMT_R5G6B5.

I do not have a 10bit monitor, but if I had one would a 10bit format appear in CAPS?

How can DirectX render to 10bit monitors?

Advertisement

That's a potential can of worms you are attempting to open. In order to get it to work you will not only need a monitor with a 10-bit panel, but also a GPU that supports it as well as OS and driver support. Getting all these planets to align can be difficult and it's probably not worth the trouble if you aren't designing something like a image editor or NLE with 10-bit support.

I haven't tested this, but logic tells me that even without such a monitor, you should be able to create and draw to a 10/10/10/2 render target, then draw that as a regular fullscreen quad to any format backbuffer.

D3D9 has a SetDialogBoxMode call, which is not in itself relevant to this discussion, but does interestingly note the following restriction:

The application specified a back buffer format compatible with GDI, in other words, one of D3DFMT_X1R5G5B5, D3DFMT_R5G6B5, or D3DFMT_X8R8G8B8.

This is enough to tell you that support for such modes doesn't exist in GDI.

Mention of GDI is relevant here because it highlights the fact that D3D9 is old technology that is no longer being updated, so you shouldn't expect it to have good support for newer hardware features.

Finally, it's important to note that it's not D3D that draws to your monitor; it's your graphics card. D3D just gives your program a way of telling your graphics card what to draw, your graphics card does the actual drawing. So this is really a problem for the hardware vendors to solve.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

IIRC, you might have to use a Direct3DDevice9Ex instead of a Direct3DDevice9.

First, only Quadro and FirePro GPUs support 10 bit output. NOT GeForce or Radeon. Second, DisplayPort is typically required for 10 bit support, NOT DVI/HDMI. Third, D3D 9 does NOT support 10 bit. You have to use OpenGL or D3D 10+; 9Ex probably supports it. You'd probably access it by creating a D3DFMT_A2R10G10B10 or D3DFMT_A2B10G10R10 format device. Also, 10 bit will shut off Windows compositing/Aero. NVIDIA might have a workaround, not sure. Haven't tested.

This document will give you the rundown for NVIDIA/OpenGL: http://www.nvidia.com/docs/IO/40049/TB-04701-001_v02_new.pdf

This document covers AMD/OpenGL: http://www.amd.com/Documents/10-Bit.pdf

SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.

First, only Quadro and FirePro GPUs support 10 bit output. NOT GeForce or Radeon.

That actually isn't completely true. In fullscreen it works perfectly fine for Geforce and Radeon, and it works with HDMI. It's only 10 bit desktop modes that require the pro cards (like using it in Photoshop). The DirectX SDK has a '10-bit scanout' sample for D3D10 that shows the difference compared to 8-bit for fullscreen gradients, and it's quite a difference for such cases.

This topic is closed to new replies.

Advertisement