diff --git a/README.md b/README.md index 54fe923..b67e1f2 100644 --- a/README.md +++ b/README.md @@ -22,21 +22,22 @@ librashader does not support legacy render APIs such as older versions of OpenGL support for Direct3D 9. | **API** | **Status** | **`librashader` feature** | -|-------------|------------|---------------------------| -| OpenGL 3.3+ | ✅ | `gl` | -| OpenGL 4.6 | ✅ | `gl` | -| Vulkan | ✅ | `vk` | -| Direct3D 9 | ⚠️ | `d3d9` | -| Direct3D 11 | ✅ | `d3d11` | -| Direct3D 12 | ✅ | `d3d12` | -| Metal | ✅ | `metal` | -| wgpu | 🆗 | `wgpu` | +|-------------|------------|--------------------------| +| OpenGL 3.3+ | ✅ | `gl` | +| OpenGL 4.6 | ✅ | `gl` | +| Vulkan | ✅ | `vk` | +| Direct3D 9 | 🆗️ |`d3d9` | +| Direct3D 11 | ✅ | `d3d11` | +| Direct3D 12 | ✅ | `d3d12` | +| Metal | ✅ | `metal` | +| wgpu | 🆗 | `wgpu` | -✅ Full Support — 🆗 Secondary Support — ⚠️ ️Experimental Support +✅ Full Support — 🆗 Secondary Support -wgpu may not support all shaders due to restrictions from WGSL. Direct3D 9 support is experimental and does not fully -support features such as previous frame feedback or history, as well as being unable to support shaders that need Direct3D 10+ -only features. +Shader compatibility is not guaranteed on render APIs with secondary support. + +wgpu has restrictions on shaders that can not be converted to WGSL, such as those that use `inverse`. Direct3D 9 does not support +shaders that need Direct3D 10+ only features, or shaders that can not be compiled to [Shader Model 3.0](https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/shader-model-3). ## Usage @@ -74,6 +75,7 @@ is not available to OpenGL. The Metal runtime is **not thread safe**. However you can still defer submission of GPU resource initialization through the `filter_chain_create_deferred` function. +The Direct3D 9 API is not thread safe, unless `D3DCREATE_MULTITHREADED` is enabled at device creation. ### Quad vertices and rotations All runtimes render intermediate passes with an identity matrix MVP and a VBO for with range `[-1, 1]`. The final pass uses a Quad VBO with range `[0, 1]` and the following projection matrix by default. @@ -127,6 +129,7 @@ The following Rust examples show how to use each librashader runtime. * [Direct3D 11](https://github.com/SnowflakePowered/librashader/blob/master/librashader-runtime-d3d11/tests/triangle.rs) * [Direct3D 12](https://github.com/SnowflakePowered/librashader/blob/master/librashader-runtime-d3d12/tests/triangle.rs) * [wgpu](https://github.com/SnowflakePowered/librashader/blob/master/librashader-runtime-wgpu/tests/hello_triangle.rs) +* [Direct3D 9](https://github.com/SnowflakePowered/librashader/blob/master/librashader-runtime-d3d9/tests/triangle.rs) Some basic examples on using the C API are also provided. diff --git a/librashader/src/lib.rs b/librashader/src/lib.rs index 13c0d8e..0dd8469 100644 --- a/librashader/src/lib.rs +++ b/librashader/src/lib.rs @@ -15,8 +15,8 @@ //! called with appropriate input and output parameters to draw a frame with the shader effect applied. //! //! ## Runtimes -//! librashader supports all modern graphics runtimes, including wgpu, Vulkan, OpenGL 3.3+ and 4.6 (with DSA), -//! Direct3D 11, Direct3D 12, and Metal. +//! librashader supports most modern graphics runtimes, including Vulkan, OpenGL 3.3+ and 4.6 (with DSA), +//! Direct3D 11, Direct3D 12, and Metal. Secondary support is available for wgpu and Direct3D 9. //! //! The Direct3D 12 runtime requires support for [render passes](https://learn.microsoft.com/en-us/windows/win32/direct3d12/direct3d-12-render-passes), which //! have been available since Windows 10, version 1809. @@ -24,8 +24,11 @@ //! The Vulkan runtime can use [`VK_KHR_dynamic_rendering`](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_dynamic_rendering.html) //! for improved performance, if the underlying hardware supports it. //! -//! Direct3D 9 support is experimental and is not guaranteed to work with all shaders. In particular, history and feedback is currently not supported. -//! Many shaders will also fail to compile due to missing or insufficient features in Direct3D 9. +//! Shader compatibility is not guaranteed on render APIs with secondary support. +//! +//! wgpu has restrictions on shaders that can not be converted to WGSL, such as those that use `inverse`. +//! Direct3D 9 does not support shaders that need Direct3D 10+ only features, or shaders that can not be +//! compiled to [Shader Model 3.0](https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/shader-model-3). //! //! wgpu support is not available in the librashader C API. //! @@ -34,13 +37,13 @@ //! | OpenGL 3.3+ | ✅ | `gl` | //! | OpenGL 4.6 | ✅ | `gl` | //! | Vulkan | ✅ | `vk` | -//! | Direct3D 9 | ⚠️ | `d3d9` | +//! | Direct3D 9 | 🆗️ | `d3d9` | //! | Direct3D 11 | ✅ | `d3d11` | //! | Direct3D 12 | ✅ | `d3d12` | //! | Metal | ✅ | `metal` | //! | wgpu | 🆗 | `wgpu` | //! -//! ✅ Full Support — 🆗 Secondary Support — ⚠️ ️Experimental Support +//! ✅ Full Support — 🆗 Secondary Support //! //! ## C API //! For documentation on the librashader C API, see [librashader-capi](https://docs.rs/librashader-capi/latest/librashader_capi/),