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