Skip to content
v1.7.0-rc1

This release marks the first major release of libplacebo, in tune with
the release of VLC 4, which will be the first major project using it.
Apart from API stability going forwards, this release brings with it a
new AV1 film grain shader, better interoperability between libplacebo
and external APIs like CUDA (via shared buffers and shared textures),
and ICtCp support.

While not strictly part of libplacebo, one of the highlights since the
previous release includes the existence of a new example file
`demos/video-filtering.c` which illustrates how one would use libplacebo
to do GPU-based image filtering in something like FFmpeg or mpv.

Additions:
- Add a new function `pl_gpu_finish` which blocks until all oustanding
  rendering on this `pl_gpu` is finished.
- Add new functions `pl_tex_recreate` and `pl_buf_recreate`, which work
  like `pl_tex/buf_create` but take a pointer to an existing tex/buf
  that will get destroyed + recreated only when necessary.
- Add a new function `pl_shader_is_failed` which will return true if a
  given shader is in a "failed" state. Shaders will be marked as failed
  on any internal/usage error, rather than them being silently ignored.
- Add a new enum `pl_channel` to clarify and encode friendly names for
  the often-referenced "canonical channel order".
- Add a new header `libplacebo/shaders/av1.h` which currently contains
  a function `pl_shader_av1_grain` for applying AV1 film grain on the
  GPU.
- Add a new concept of an "exportable" buffer. Exportable buffers can be
  exported using a handle (e.g. fd) and imported into other foreign APIs
  such as CUDA. The new function `pl_buf_export` must be used to
  correctly synchronize access to the buffer.
- Supporting the previous feature, add a new field `memory_type` to
  `pl_buf_params` which can be used to influence what type of memory
  to allocate a buffer from. Currently only works for texture transfer
  buffers, since allocating uniform/storage buffers from non-VRAM makes
  little sense.
- Implement the ITU-R BT.2100 ICtCp color system. Since the libplacebo
  color systems are not strictly tied to any particular transfer
  function, we must explicitly mark which flavor of ICtCp is meant.
- Add a new field `instance_params` which can be used to influence the
  parameters used when `pl_vulkan_create` ends up creating an internal
  instance.
- Add a new function `pl_vulkan_unwrap` which allows users to unwrap a
  vulkan-baed `pl_tex` to expose the internal VkImage, allowing
  simultaneous use (via `pl_vulkan_hold/release`) similar to wrapped
  external images.

Changes:
- Empty device names ("") can now be passed to `pl_vulkan_create`.
  They will be treated as if NULL was passed.
- The `out_plane` parameter of `pl_upload_plane` is now optional.
- Clarify/Relax the restrictions on `pl_buf` usage and polling. Users
  are technically free to use `pl_buf` for multiple simultaneous
  libplacebo operations. Buffer polling is only needed for accesses by the
  host.
- `pl_vulkan_hold` now returns a bool indicating success.

Fixes and performance improvements:
- Meson 0.47 is correctly marked as the minimum required version.
- Fix compilation on clang.
- Fix compilation on glslang git master.
- Fix std140/std430 packing errors for vec3.
- Skip unnecessary flush in pl_buf_poll noop cases.
- Fix variable collision in sh_prng.
- Don't leak glslang internal symbols on supported platforms.
- Fix an issue where `pl_pass_run` was stricter than intended about
  compatibility with between `target` and `target_dummy`.
- Fix an issue where `pl_dispatch` could sometimes try dispatching
  shaders with an incompatible target.
- Fix an error in the heuristic for choosing the optimal image layout
  for vulkan render passes.
- Improved debugging messages in several places.
- Slightly speed up lookups from texture LUTs.
- Fix the addressing of shader LUTs in some hypothetical cases.
- Correctly flush the contents of host-readable buffers after
  modifications made by the GPU.
- Fix synchronization on `pl_buf_write` with non-mapped buffers.
- Fix undefined behavior when using push descriptors.
- Fix build issues on Android arm32.
- Slightly speed up some texture recreate operations by invalidating
  re-used textures.
- Fix an issue when trying to update large (>64k) VRAM-resident buffers.
- Fix two address calculation bugs in `pl_tex_blit`.