Releases: SnowflakePowered/librashader
librashader 0.4.1
Version 0.4.1 has the canonical C ABI version 1
, and API version 1
.
This is a bugfix release to address an issue with glShaderSource
reading invalid characters for the shader.
Notable Changes
- 075a298 gl: fix
glShaderSource
reading past the string buffer.
ABI Changes Incoming
The next release in the 0.5.x series will be C ABI-incompatible to clean up some inconsistencies in the C ABI.
See #102 for more details.
librashader 0.4.0
Version 0.4.0 has the canonical C ABI version 1
, and API version 1
.
This is a buffered release mainly intended to deprecate librashader-spirv-cross
while addressing the concerns raised in #111. Alongside it brings some bugfixes and semver-incompatible performance optimizations, mostly affecting the preset
, preprocess
, and reflect
APIs.
If you only consume the runtime
API, the only change that will affect you are changes to the FilterChainParameters
trait.
C API consumers do not need to update their headers. This release is not C API-breaking.
Notable Changes
- c3033cf reflect: port SPIRV-Cross usage to spirv-cross2
- It is very clear that
librashader-spirv-cross
is unsound due to cross FFI unwind behaviour and inconsistent bindings.spirv-cross2
is a much more solid foundation to build upon. - This release allows Rust consumers to transition to librashader 0.4.0 with minimal changes while
librashader-spirv-cross
is deprecated and yanked.
- It is very clear that
- c447e40 runtime: make runtime parameters explicitly thread safe.
- Before, setting parameters through FFI in separate threads could possibly cause a data race, this closes the soundness hole, adhering to the documented thread-safety guarantees.
- While the C API does not change, this incurs a semver-breaking change on the Rust API.
- Direct3D 12 performance improvements
ABI Changes Incoming
The next release in the 0.5.x series will be C ABI-incompatible to clean up some inconsistencies in the C ABI.
See #102 for more details.
librashader 0.3.3
Version 0.3.3 has the canonical C ABI version 1
, and API version 1
.
This is a bugfix release to address BGRA LUT image loads having the final 31 pixels be swizzled as ARGB. It also fixes builds for Windows 7 on an unsupported but recognized basis. Version 0.3.2 was skipped as that was published only for librashader
as a doc-fix for macOS.
Notable Changes
b7fd3bc runtime: fix swizzle for remainder of pixels not being swizzled correctly
ABI Changes Incoming
The next release in the 0.4.x series will be C ABI-incompatible to clean up some inconsistencies in the C ABI. See #102
librashader 0.3.1
Version 0.3.1 has the canonical C ABI version 1
, and API version 1
.
This release promotes the Direct3D 9 runtime from experimental support to secondary support following improvements in uniform bindings, as well as bringing a much improved linking algorithm that properly demotes unused vertex shader outputs to global variables for better handling in cross-compile scenarios such as via SPIR-V Cross or spirv-to-dxil.
While this has been the case for the past couple of releases already, as of 0.3.1, tagged builds will only be provided for Windows and macOS for x86_64 and aarch64. Linux users are served by OpenBuildService, or AUR for Arch users.
CI builds will remain available on all tested platforms for the retention period of 90 days.
†The librashader crate had a 0.3.2
release to fix docs building on docs.rs for macOS and iOS due to missing wgpu dependencies.
Notable Changes
- 5ef0055 d3d9: fix searching for vertex uniform names in the fragment shader
- d1e49b7 d3d9: search for uniform names starting with
global
to determine register assignments - 9b40c10, 1957f57 reflect: demote unused vertex shader outputs to global variables in SPIR-V
- 5560c1e runtime: improve LUT load swizzling using an algorithm LLVM is more likely to autovectorize
ABI Changes Incoming
The next release in the 0.4.x series will be C ABI-incompatible to clean up some inconsistencies in the C ABI. See #102
librashader 0.3.0
Version 0.3.0 has the canonical C ABI version 1
, and API version 1
.
This is the first "tagged" release in a while, and includes a multitude of bugfixes since 0.2.4. This is a Rust-breaking change due to updates in wgpu and windows updates, but maintains the same C ABI and API version and is backwards compatible with all versions in the 0.2.x series.
Notable Changes
- bacfbf0 cache: delete cache if corrupted
- e02e1ae gl: fix luts loading with incorrect origin
- b707195 d3d9: add an experimental Direct3D 9 runtime
- 9c895ca wgpu: fix incorrect format mismatch for framebuffer copies
- fa48b93 rt: cap texture scaling to [1, 16384], fixes crashes on Metal
- c646086 wgpu: update to wgpu 22
- 35f499f wgpu: cache pipelines for wgpu
- 3cda5b7 d3d12: ignore user-provided size for input view, and use the texture size
- 4d6793d d3d11: remove output/input view wrappers, ignoring
libra_viewport_t
for sizes and use the texture size directly.
ABI Changes Incoming
The next release in the 0.4.x series will be C ABI-incompatible to clean up some inconsistencies in the C ABI. See #102.
librashader 0.2.4
Version 0.2.4 has the canonical C ABI version 1
, and API version 1
.
This is a bugfix release to fix building the librashader-reflect
crate standalone. There were some minor optimizations to the Vulkan and Direct3D 12 runtimes.
Notable Changes
- f61bed3 vulkan: remove unneeded
Arc<ash::Device>
handles - 752417f vulkan: switch from an
RwLock
to aMutex
for holding the allocator lock - 10ad2d9 d3d12: make the descriptor heap allocator lock free
- 7719b93 d3d11: upgrade to windows 0.52.0
- 8a9adeb d3d12: upgrade to windows 0.52.0
Full Changelog: librashader-v0.2.3...librashader-v0.2.4
librashader 0.2.3
Version 0.2.3 has the canonical C ABI version 1
, and API version 1
.
This is a bugfix release to re-export MSL targets in the librashader
crate. There were some minor micro-optimizations to the vertex input attributes that should not affect runtime performance in a noticeable way.
This is a source-only release due to changes not affecting runtime performance in any noticeable way.
Notable Changes
Full Changelog: librashader-v0.2.2...librashader-v0.2.3
librashader 0.2.2
Version 0.2.2 has the canonical C ABI version 1
, and API version 1
.
This is a bugfix release that allows the D3D12 runtime to work without dxil.dll
. Starting from this release, unused inputs are trimmed to help with compatibility across different shader runtimes.
Notable Changees
- 50aa582 d3d12: fakesign compiled shaders to work without dxil.dll
- e8eee02 reflect: always trim unused inputs from fragment shader
Full Changelog: librashader-v0.2.1...librashader-v0.2.2
librashader 0.2.1
Version 0.2.1 has the canonical C ABI version 1
, and API version 1
.
This is a bugfix release that addressed a viewport bug in wgpu as well as aligning offscreen pass behaviour for OpenGL with other runtimes.
Notable changes
- fe84e6a gl: use the identity matrix for intermediate passes to align behaviour with other runtimes
- 913ede3 wgpu: properly set the viewport depth minimum
Notable changes from 0.2.0
- #24 wgpu: add a wgpu runtime by @chyyran
- #24 metal: add a Metal runtime by @chyyran
- #37 presets: add support for preset path wildcards by @chyyran
- #43 reflect: support
scale = "original"
,Rotation
,FinalSubFrame
,CurrentSubFrame
shader semantics by @chyyran - #44 reflect(glsl): don't unset vertex input positions (fixes OpenGL on macOS) by @chyyran
- #36 build: update build-script to support macOS and non-linux unixes by @LukeUsher
- #34 reflect: replace shaderc with glslang directly by @chyyran
- #21 build: update spirv-to-dxil-sys to remove mesa build reqs by @chyyran
- #32 build: build packages for some Linux distributions
- vulkan: bugfixes and improvements by @chyyran
Breaking changes compared to 0.1.4
363657d makes Render Passes the default rendering mode on Vulkan and makes dynamic rendering opt-in. This is an API breaking change and will affect existing users using the Vulkan C API. This does not break ABI and users with VK_KHR_dynamic_rendering
support will notice no difference, but users on Vulkan 1.2 and later GPUs will need to stay on librashader 0.1.4, or the application needs to be updated with new librashader.h
headers.
If you are an existing user of librashader that is unable to update your application, and this is affecting your users please file an issue. There are mechanisms in place to restore the previous API via the API-versioning mechanism but they were not implemented due to a belief that few users of librashader are currently using the Vulkan C API, and a decision was made to reduce code complexity rather than add in API-preserving behaviour.
Rust users are not considered affected due to the different versioning policies between the Rust and C APIs.
Full Changelog: librashader-v0.1.4...librashader-v0.2.1
librashader 0.2.0
Version 0.2.0 has the canonical C ABI version 1
, and API version 1
.
The notable changes for this release include wgpu and Metal runtimes, support for new scaling options, and preset path wildcards.
Breaking changes
363657d makes Render Passes the default rendering mode on Vulkan and makes dynamic rendering opt-in. This is an API breaking change and will affect existing users using the Vulkan C API. This does not break ABI and users with VK_KHR_dynamic_rendering
support will notice no difference, but users on Vulkan 1.2 and later GPUs will need to stay on librashader 0.1.4, or the application needs to be updated with new librashader.h
headers.
If you are an existing user of librashader that is unable to update your application, and this is affecting your users please file an issue. There are mechanisms in place to restore the previous API via the API-versioning mechanism but they were not implemented due to a belief that few users of librashader are currently using the Vulkan C API, and a decision was made to reduce code complexity rather than add in API-preserving behaviour.
Rust users are not considered affected due to the different versioning policies between the Rust and C APIs.
Notable changes
- #24 wgpu: add a wgpu runtime by @chyyran
- #24 metal: add a Metal runtime by @chyyran
- #37 presets: add support for preset path wildcards by @chyyran
- #43 reflect: support
scale = "original"
,Rotation
,FinalSubFrame
,CurrentSubFrame
shader semantics by @chyyran - #44 reflect(glsl): don't unset vertex input positions (fixes OpenGL on macOS) by @chyyran
- #36 build: update build-script to support macOS and non-linux unixes by @LukeUsher
- #34 reflect: replace shaderc with glslang directly by @chyyran
- #21 build: update spirv-to-dxil-sys to remove mesa build reqs by @chyyran
- #32 build: build packages for some Linux distributions
- vulkan: bugfixes and improvements by @chyyran
New Contributors
- @LukeUsher made their first contribution in #36
Full Changelog: librashader-v0.1.4...librashader-v0.2.0