Hardware Vertex Processing/Pure Device, etc

Started by
3 comments, last by Evil Steve 14 years, 11 months ago
I have a few questions. :) 1. What is a pure device? 2. What does hardware vertex processing refer to - TnL, vertex shaders? Also, what cards have hardware vertex processing support? Thanks.
Einstein once said that only the universe and human stupidity are infinite. He wasn't too sure about the universe though...
Advertisement
1) A pure device is a special kind of device that makes DirectX do no checks over redundant changes of states, optimization, etc...generally its better to leave it as non-pure.
2) Almost all cards there days have hardware vertex support. It refers to the capability of the graphic cards to process vertices in hardware instead on the CPU. Some cards like older Intel integrated gpu had only the pixel processing in hardware, but the vertex processing in software.
Quote:Original post by feal87
1) A pure device is a special kind of device that makes DirectX do no checks over redundant changes of states, optimization, etc...generally its better to leave it as non-pure.
2) Almost all cards there days have hardware vertex support. It refers to the capability of the graphic cards to process vertices in hardware instead on the CPU. Some cards like older Intel integrated gpu had only the pixel processing in hardware, but the vertex processing in software.
1. A pure device can sometimes give you a small performance increase, because D3D doesn't do any sort of buffering and just passes the redundant state changes straight to the driver. If you buffer state changes yourself, at the application level, or make very few redundant changes, this can be benificial. However, you lose all Get*() calls on the device for data that can be stored in a state block, which can be a pain. The DX docs mention this.

2. It refers to vertex shaders and TnL. Cards before the GeForce 2 couldn't do vertex transformation and lighting in hardware, D3D had to do it on the CPU and pass the post-transformed vertices to the driver. As of the GeForce 2, you can do that step in hardware on the graphics card, which is faster. You can check for support of this by checking for the presence of the D3DDEVCAPS_HWTRANSFORMANDLIGHT cap bit in the DevCaps of the D3DCAPS9 struct. This refers to fixed function vertex processing, not shaders.

For vertex shaders, you need to check for hardware support. If the D3DCAPS9's VertexShaderVersion member is less than the vertex shader version you require, then the card can't run that version of vertex shaders in hardware, and you'll need to use software vertex processing (Which means D3D will run them in software). If the card does support them, then you can use hardware vertex processing, and have your vertex shaders run on the GPU, which should be faster.

Check out the card caps spreadsheet in \DirectX SDK\Samples\C++\Direct3D\ConfigSystem\ to see the various vertex shader versions and which cards support hardware TnL.
Note that if you're using fixed function in D3D9 on Vista, and your card supports shader model 2, the runtime will ignore the "pure" specifier.
Quote:Original post by ET3D
Note that if you're using fixed function in D3D9 on Vista, and your card supports shader model 2, the runtime will ignore the "pure" specifier.
Why is that? And is this something that only affects the release runtime, or will the debug runtime let it pass too?

This topic is closed to new replies.

Advertisement