Skip to content

Releases: SnowflakePowered/librashader

librashader 0.9.1

03 Oct 06:28

Choose a tag to compare

Version 0.9.1 has the canonical C ABI version 2, and API version 2.

librashader 0.9.1 contains some minor bugfixes and brings support for wgpu 27.

Notable Changes

  • rt: clear render target before rendering on all runtimes (by @xzn)
  • rt(vk): right-size descriptor pool (by @xzn)
  • rt(wgpu): update wgpu to 27 (by @IsaacMarovitz)
  • rt(d3d): update windows crate to 0.62
  • deps: remove unused image subdependencies

librashader 0.8.1

21 May 04:01

Choose a tag to compare

Version 0.8.1 has the canonical C ABI version 2, and API version 2.

librashader 0.8.1 fixes issues with runtime parameter enumeration and cache invalidation on Windows.

Notable Changes

  • rt: Be more aggressive with cache invalidation, always fall back to uncached pipeline generation if any error occurs while reading from the cache
  • rt: Properly enumerate valid runtime shader parameters, not just those defined in the .slangp.
  • preprocess: Upgrade nom to 8.0

librashader 0.8.0

11 Apr 05:49

Choose a tag to compare

Version 0.8.0 has the canonical C ABI version 2, and API version 2.

librashader 0.8.0 updates the wgpu runtime to wgpu 25, and provides some foundational dependency updates with no functional runtime change.

Notable Changes

  • rt(wgpu): Update to wgpu 25
  • rt(mtl): Update to objc2 0.3
  • rt(gl): Update to glow 0.18

This is a source-only release as wgpu is only available via the Rust API, and the other dependency updates have no functional change to their respective runtimes. The semver-breaking changes affect only the Rust API as per librashader's versioning policy.

librashader 0.7.1

29 Mar 22:10

Choose a tag to compare

Version 0.7.1 has the canonical C ABI version 2, and API version 2.

librashader 0.7.1 is a bugfix release that only affects wgpu. It fixes a panic when attempting to create a texture larger than DeviceLimits::max_texture_dimension_2d.

Notable Changes

  • rt(wgpu): clamp texture size to device limits

This is a source-only release as wgpu is only available via the Rust API.

librashader 0.7.0

25 Mar 21:43

Choose a tag to compare

Version 0.7.0 has the canonical C ABI version 2, and API version 2.

librashader 0.7.0 updates to wgpu 24.

Notable Changes

  • rt(wgpu): Update to wgpu 24

This is a source-only release as wgpu is only available via the Rust API.

librashader 0.6.3

21 Mar 05:17

Choose a tag to compare

Version 0.6.3 has the canonical C ABI version 2, and API version 2.

librashader 0.6.3 is a fix release to fix Rust nightly builds due to rust-lang/rust#128440.

Notable Changes

  • rt: fix TAITs to use define_opaque to fix builds on nightly
  • build: bump nightly MSRV to 1.87
  • presets: update to nom 8.0

This is a source-only release as this is only a build-time change.

librashader 0.6.2

20 Nov 00:05

Choose a tag to compare

Version 0.6.2 has the canonical C ABI version 2, and API version 2.

librashader 0.6.2 brings quite a few new features recently introduced in RetroArch, as well as a wealth of bugfixes. Beginning with the 0.6.x series, the wgpu runtime as a fully supported runtime alongside the Direct3D11/12, OpenGL, Vulkan, and Metal runtimes.

Note the API bump for the C API. API 2 enables the libra_preset_create_with_options API as well as frametime and aspect ratio uniforms.

Version 0.6.0 was skipped due to a release configuration error. Version 0.6.1 is identical to 0.6.2 except for some minor WGPU optimizations and doc fixes.

Notable Changes

  • #150 fix: create a history queue if only OriginalHistory1 is used
  • #149 runtime: add FrameTimeDelta, OriginalFPS, OriginalAspect, and OriginalAspectRotated uniforms
    • For these uniforms to work properly, the corresponding ShaderFlags in the Rust API or libra_preset_create_with_options in the C API must be used to emit the requisite defines in the compiled shader.
    • Passing in an aspect ratio of 0 will infer the aspect ratio from the original source. This behaviour will be overridden by any other value passed into frame options.
    • The libra_preset_create and libra_preset_create_with_context C API functions are now deprecated but will continue to be available for backwards compatibility purposes.
  • #144 preprocess: add support for #pragma include_optional
  • #140 wgpu: update wgpu to 23 and promote to fully supported
    • A lot of background work was needed to get here, including an inverse polyfill added to naga in gfx-rs/wgpu#6385, and removing OpModf from glslang outputs in KhronosGroup/glslang#3757.
    • FSR shaders are still explicitly unsupported as ImageGather parsing for SPIR-V is still unimplemented in naga.
    • Shaders such as Mega Bezel finally work with wgpu!
  • e93a9eb cache: delete the cache when loading the cache panics
    • This will avoid shaders failing to load, requiring users to delete %localappdata%\librashader\librashader.db.1 on Windows.

Other Changes (0.6.2)

  • #152 wgpu: reduce unnecessary Arc clones

librashader 0.5.1

06 Oct 20:16

Choose a tag to compare

Version 0.5.1 has the canonical C ABI version 2, and API version 1.

0.5.1 is mostly a bug and docfix release to enable packaging on Debian 12 via rustc-web, as well as improving shader compatibility with the WGSL backend used in wgpu.

The 0.5.x series of releases is the first series of librashader releases since 0.1.0 with a bump in ABI version, and is thus ABI-incompatible with versions of librashader prior to 0.5.0. Trying to load this version of librashader if the application only supports ABI 1 will fail.

  • If you are an end-user, please use librashader 0.4.5 until the developer has updated their application.
  • If you are a developer, see MIGRATION-ABI2.md on how to update your application to support librashader ABI 2.
  • If you are a package maintainer, you may want to postpone packaging librashader 0.5.1 until relevant applications have been updated. Note that the SONAME for librashader 0.5.0 and above should be librashader.so.2.

ABI 2 cleans up some inconsistencies across runtimes and makes viewport handling much easier and well defined.

Notable Changes

  • 2fe66d9 reflect: order variables after type definitions in the link step to improve WGSL compatibility
  • 562e1e5 doc: bump msrv to 1.78

Notable Changes from 0.5.0

  • #129 cli: add a librashader-cli to interact with shader presets and source code.
    • See CLI.md for more details and usage notes
  • presets: introduce the concept of a "shader pack", which is a JSON-serializable format for packaging a shader preset into a single file.
    • A preset pack includes all required textures and preprocessed shader source files. This is a prerequisite for running librashader on environments without filesystems such as the web.
    • All runtimes support loading from a ShaderPresetPack, which implements Serialize/Deserialize with the serde crate feature.
    • Preset packs can be created with the librashader-cli pack command, but this format should not yet be considered stable.
    • There are no plans for a C API that works with preset packs directly.
  • aeb0a16 vulkan: allow specifying the graphics queue to use
  • OpenGL changes and improvements
    • 1bdadaa opengl: port OpenGL runtime to glow.
      • glow is a platform abstraction layer for OpenGL and is a step towards allowing librashader to run on WebGL.
    • 41353ac opengl: remove need for externally managed FBO for the output image
    • e7fe965 opengl: always ensure framebuffers are bound before rendering
  • #102 Major ABI breaking changes to the C API
    • 1e33b4c capi: make viewport optional and default to a viewport that spans the entire texture
    • 61fdaee capi(opengl): take libra_gl_loader_t in filter chain constructor
    • f18c22a capi(d3d11): take ID3D11ShaderResourceView* directly
    • 7a13136 capi(d3d12): allow passing ID3D12Resource* directly without needing an externally allocated CPU descriptor
  • Direct3D performance optimizations and fixes
    • b0df631 d3d9: load LUTs with BGRA8 ordering rather than ARGB8
    • dbfa822 d3d9: disable alpha blending
    • 7d483f2 d3d9: take viewport IDirect3DSurface9 by reference to avoid AddRef/Release
    • 2fe7702 d3d11: avoid QueryInterface when getting the dimensions of a texture
    • 7b7fd99 d3d11: take viewport ID3D11RenderTargetView by reference to avoid AddRef/Release
    • 3c20c83 d3d12: take D3D12InputImage without changing the refcount
    • 7a13136 d3d12: allow the filter chain to optionally manage input/output descriptors
    • c57e502 d3d12: reduce unnecessary refcount increment/decrement for resources that last the lifetime of the filter chain

librashader 0.5.0

06 Oct 05:10

Choose a tag to compare

Version 0.5.0 has the canonical C ABI version 2, and API version 1.

This is the first release since 0.1.0 with a bump in ABI version, and is thus ABI-incompatible with versions of librashader prior to 0.5.0. Trying to load this version of librashader if the application only supports ABI 1 will fail.

  • If you are an end-user, please use librashader 0.4.5 until the developer has updated their application.
  • If you are a developer, see MIGRATION-ABI2.md on how to update your application to support librashader ABI 2.
  • If you are a package maintainer, you may want to postpone packaging librashader 0.5.0 until relevant applications have been updated. Note that the SONAME for librashader 0.5.0 and above should be librashader.so.2.

ABI 2 cleans up some inconsistencies across runtimes and makes viewport handling much easier and well defined.

Notable Changes

  • #129 cli: add a librashader-cli to interact with shader presets and source code.
    • See CLI.md for more details and usage notes
  • presets: introduce the concept of a "shader pack", which is a JSON-serializable format for packaging a shader preset into a single file.
    • A preset pack includes all required textures and preprocessed shader source files. This is a prerequisite for running librashader on environments without filesystems such as the web.
    • All runtimes support loading from a ShaderPresetPack, which implements Serialize/Deserialize with the serde crate feature.
    • Preset packs can be created with the librashader-cli pack command, but this format should not yet be considered stable.
    • There are no plans for a C API that works with preset packs directly.
  • aeb0a16 vulkan: allow specifying the graphics queue to use
  • OpenGL changes and improvements
    • 1bdadaa opengl: port OpenGL runtime to glow.
      • glow is a platform abstraction layer for OpenGL and is a step towards allowing librashader to run on WebGL.
    • 41353ac opengl: remove need for externally managed FBO for the output image
    • e7fe965 opengl: always ensure framebuffers are bound before rendering
  • #102 Major ABI breaking changes to the C API
    • 1e33b4c capi: make viewport optional and default to a viewport that spans the entire texture
    • 61fdaee capi(opengl): take libra_gl_loader_t in filter chain constructor
    • f18c22a capi(d3d11): take ID3D11ShaderResourceView* directly
    • 7a13136 capi(d3d12): allow passing ID3D12Resource* directly without needing an externally allocated CPU descriptor
  • Direct3D performance optimizations and fixes
    • b0df631 d3d9: load LUTs with BGRA8 ordering rather than ARGB8
    • dbfa822 d3d9: disable alpha blending
    • 7d483f2 d3d9: take viewport IDirect3DSurface9 by reference to avoid AddRef/Release
    • 2fe7702 d3d11: avoid QueryInterface when getting the dimensions of a texture
    • 7b7fd99 d3d11: take viewport ID3D11RenderTargetView by reference to avoid AddRef/Release
    • 3c20c83 d3d12: take D3D12InputImage without changing the refcount
    • 7a13136 d3d12: allow the filter chain to optionally manage input/output descriptors
    • c57e502 d3d12: reduce unnecessary refcount increment/decrement for resources that last the lifetime of the filter chain

librashader 0.4.5

21 Sep 19:49

Choose a tag to compare

Version 0.4.5 has the canonical C ABI version 1, and API version 1.

This will likely be the final release supporting C ABI 1. This is mostly a bugfix release to squash remaining bugs before ABI 2 releases as 0.5.0.

Version 0.4.4 was skipped due to a release configuration error.

Notable Changes

  • 57f2dab reflect: fixes handling of the CurrentSubFrame uniform
  • 81840a9 reflect: fix #pragma name by inserting shader names as pass aliases.
  • cbe6510 preprocess: allow step parameter in #pragma parameter to be optional as per the slang shader spec
  • d6f8950 runtimes: only draw the final pass as feedback if used as feedback by the filter chain.

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.