This is a major new release involving a significant overhaul of the public API, full thread safety, support for native HDR output, and more.
Summarized changelog:
- Additions:
- always accept DRM_FORMAT_MOD_INVALID for texture imports
- add pl_shader_sample_oversample, a variant of nearest-neighbour that preserves pixel aspect ratios - good for pixel art
- add support for compile-time specialization constants (pl_constant), and use them to speed up recompilation of shaders with hard-coded constants
- implement full black point adaptation, even when not using ICC profiles, and infer this black-point-adapted BT.1886 instead of gamma 2.2 as the default gamma curve for SDR files.
- Changes:
- make almost everything thread-safe, and document the parts that aren't. In particular, almost all GPU state access is now thread safe, freeing up users to access pl_gpu instances from multiple threads, even when the underlying API is OpenGL
- deprecate disable_overlay_sampling, now effectively always true
- make pl_renderer automatically clear the target image, freeing users from the responsibility of calling pl_frame_clear themselves. This can be controlled via three new fields in pl_render_params: background_color, background_transparency and skip_target_clearing
- rename pl_context to pl_log, and make its use optional. The old names have been deprecated. It now lives inside <libplacebo/log.h>
- remove support for 64-bit float formats, which probably don't work on any Vulkan implementation
- stop contrast-limiting ICC profiles, instead assuming perceptual profiles have infinite contrast
- remove pl_shader_signature for being necessarily unsafe
- require Vulkan 1.1 as the minimum Vulkan version
- significantly increase the default strengths of the desaturation settings in pl_color_map_params to mimic the Hollywood feel
- Fixes and performance improvements:
- don't explode pl_queue on NaN/Infinity/weird PTS values
- fix edge case involving plane merging for cropped images
- several fixes for edge cases in <libplacebo/utils/libav.h> helpers
- fix blending edge cases involving overlays and alpha channels
- skip some unnecessary matrix multiplications for RGB content
- slightly improve small texture transfers in some emulated edge cases
- fix several possible hash collisions for generated shaders, making the shader dispatch mechanism significantly more robust
- improve performance of textureGather-based polar sampling, especially for radius 2 and 4
- fix crash on edge case when shader compilation fails
- avoid generating spurious EGL errors when probing for EGL format modifiers
Full changelog here.