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`.