v1.18.0 The major changes of this release include a new and completely overhauled HDR tone mapping algorithm, support for importing backing memory for textures and buffers (such as via dmabuf fds), as well as a swapchain resizing API that, among other benefits, allows libplacebo to function properly on Wayland. There is also now support for generating CPU-backed "dummy resources" for things like lookup tables or convolution kernels, for users who prefer managing their own GPU resources. This allows `pl_shader`-level API users to access the full host of libplacebo shaders without being restricted the lack of a `pl_gpu`. Additions: - `pl_color_space` now has a `sig_scale` field, which allows modifying the signal range without affecting the transfer function's shape. (Effectively, by "stretching" it). This can be useful when dealing with HDR material encoded in a non-HDR curve such as linear light. - Add support for importing handles (including `pl_sync` objects and `pl_shared_mem`). Currently, only memory can be imported. - Add partial support for dmabuf fd interop. Currently does not support dma layout modifiers, so the usefulness of this feature is limited. - Allow importing external memory when creating textures. - Add a way to overexpose HDR material to bring its brightness up to more easily viewable levels. - Add `pl_var_int` to go alongside the other `gpu.h` helpers. - Add a way to create CPU-backed "dummy" instances of `pl_gpu`. These are not capable of compiling or executing any shaders, so they're only useful for users who want to generate and compile their own shaders. All GPU resources (textures, buffers) are backed by `malloc`. - Add a new field to `pl_tex/buf_params` allowing users to attach arbitrary references (void*) that libplacebo will ignore. - Add a function for changing the `pl_context_params` after creation. - Add a new API function for dealing with swapchain resize events. This function can be used to both query and update the swapchain size, based on the usage. Not all platforms support all operations. - Add new demo/skeleton based on GLFW. Changes: - Remove the `hdr_simulation` field from `pl_color_map_params`. Use `signal_scale` on the target color space instead. - Subdivide handle capabilities based on object type (texture vs buffer). - Completely redesign the HDR tone mapping algorithm. Most members of `pl_tone_mapping_params` have been updated, in particular the options related to desaturation and peak detection. - Split up the HDR peak detection API into a "detection" and "application" stage, which can run independently. This avoids the one-frame delay inherent with the previous API, and thus allows tone mapping to be frame perfect. - Remove superfluous field from `pl_shader_reset` left behind from a previous version of the API. Fixes and performance improvements: - Correctly apply the OOTF before performing linear colorspace operations on scene-referred content. - Avoid clipping when tone-mapping out of gamut content by tone mapping before gamut mapping. - Correctly reset the peak detection buffer state when running `pl_renderer_flush_cache`. - Correctly use the image's original color space as the reference space when the content is prelinearized by the renderer. Fixes some cases where libplacebo could end up defaulting `PL_COLOR_TRC_AUTO` to a suboptimal curve. - Correctly track the lifetime and ownership of individual vulkan buffer objects. Fixes some synchronization issues when attempting to use the same buffer from multiple different queue families. - Fix integer overflow on implementations with very large texture size limits. - Fix building against static libshaderc.