34 lines
3.3 KiB
Plaintext
34 lines
3.3 KiB
Plaintext
NVidia bad things in Direct3D9:
|
|
1. Clip planes aren't nativelly supported by GPU/Driver
|
|
--- WorkAround solution in FarCry: using texkill PS instructions to emulate clip-planes
|
|
2. Fog should be calculated in Vertex shader. Otherwise fog doesn't work at all.
|
|
--- WorkAround solution in FarCry: automatic modificating of vertex shader - adding subroutine for fog calculation (depth based)
|
|
3. D3DRS_FOGSTART and D3DRS_FOGEND should be set to 0 and 1 respectivelly in case of programmable pipeline (otherwise fog calculations in vertex shader aren't correct)
|
|
--- WorkAround solution in FarCry: automatic set fog range to [0,1] if vertex shader is using
|
|
4. Depth textures aren't working properly (for some reason several depth textures work but other ones don't work (randomly)
|
|
--- WorkAround solution in FarCry: use 2D projected shadow maps or mixed Depth/2D shadow maps with pixel shader 2.0
|
|
5. non-power of two dynamic DEFAULTPOOL textures aren't working properly (after locking this texture Direct3D returns pointer to non-valid buffer)
|
|
--- WorkAround solution in FarCry: do not use DEFAULTPOOL textures for video playing (using MANAGED textures instead)
|
|
6. On GF2 MX if we create non-power of two 32 bit texture (doesn't matter MANAGED or DEFAULT pool) alpha-blending stops working everywhere
|
|
--- WorkAround solution in FarCry: use 16 bit textures instead of 32 bit to play video
|
|
7. On GF3 (NV20) projected textures aren't supported with EMBM
|
|
--- WorkAround solution in FarCry: use projection dividing on per-vertex level in vertex shader for GF3 GPU's instead of per-pixel projection (geometry should be highly tesselated)
|
|
8. On GF2 MX stream offset cannot excites 65536 (undocumented). Otherwise geometry cannot be rendered (just disappears)
|
|
--- WorkAround solution in FarCry: limit vertex pools by size 65536 bytes
|
|
9. Performance of pixel shaders 2.0 is very poor in compare to ps.1.1 performance on NV3X GPU's (especially if float variable types are used)
|
|
--- WorkAround solution in FarCry: use ps.1.1 shaders on NV3X whenever it possible and using half types instead of floats
|
|
10. Full scene AA isn't visible in windowed mode, though it slowdowns a lot. So definetelly it's enabled but just not visible
|
|
--- WorkAround solution in FarCry: use FSAA only in fullscreen mode
|
|
11. NVidia CG compiler is very buggy (produces wrong assembly code sometime for pixel shaders 1.1 and 2.0). The same problems in Microsoft's HLSL compiler
|
|
--- WorkAround solution in FarCry: in some cases we have to write assembly shaders instead of CG (currently we have 66 hand-written assembly shaders because of bugs in compilers),
|
|
some time just reordering of operations in CG code helps to produce proper output assembly pixel-shader code
|
|
|
|
ATI bad things in OpenGL:
|
|
1. GL_EXT_texture_rectangle extension doesn't work (though driver reports about supporting it,
|
|
when we try to enable it we get error message invalid enum)
|
|
--- WorkAround solution in FarCry: no solution currently. We have to disable playing of video files on ATI in OpenGL
|
|
2. OpenGL driver is much slower then Direct3D
|
|
--- WorkAround solution in FarCry: Use Direct3D renderer only on ATI video cards
|
|
3. Fog doesn't work when we use programmable pipeline
|
|
--- WorkAround solution in FarCry: no solution currently (Using Direct3D renderer only on ATI video cards)
|
|
|