Updated Developer guidelines (markdown)

Philip Rebohle 2025-02-23 18:11:37 +01:00
parent 6c94d517e7
commit 3a52b47bd2

@ -13,7 +13,7 @@ Note that this page is written for DXVK 2.6 and later. Older versions may behave
- Do not compile shaders "on demand", i.e. just before they are first used in a draw. Doing so **will** cause stutter that is more severe than on native D3D11 drivers. - Do not compile shaders "on demand", i.e. just before they are first used in a draw. Doing so **will** cause stutter that is more severe than on native D3D11 drivers.
- Do not use stream output. DXVK supports this feature, but it is significantly less efficient than compute shaders on our implementation. - Do not use stream output. DXVK supports this feature, but it is significantly less efficient than compute shaders on our implementation.
- Do not use class linkage. DXVK does not support this feature. - Do not use class linkage. DXVK does not support this feature.
- In shader code, avoid unrolling loops. Excessive unrolling increases compile times and makes it harder for Vulkan drivers to optimize. - In shader code, avoid unrolling large loops or loops with high iteration counts. Excessive unrolling increases compile times and makes it harder for Vulkan drivers to optimize.
## Constant buffers ## Constant buffers
- Use `*SetConstantBuffers1` to bind sub-ranges of a larger constant buffer. This is by far the fastest path on our implementation. Ideally, only map the buffer with `MAP_WRITE_DISCARD` a few times per frame and write as much data as possible at once, but if that is not viable, using `MAP_WRITE_NO_OVERWRITE` between draws is still good. - Use `*SetConstantBuffers1` to bind sub-ranges of a larger constant buffer. This is by far the fastest path on our implementation. Ideally, only map the buffer with `MAP_WRITE_DISCARD` a few times per frame and write as much data as possible at once, but if that is not viable, using `MAP_WRITE_NO_OVERWRITE` between draws is still good.