Page MenuHomeSolus

Update libplacebo to 4.157.0
ClosedPublic

Authored by aleksvor on Sat, Sep 11, 6:56 AM.

Details

Summary

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.

Test Plan
  1. Rebuilt mpv and vlc.
  2. Played video in mpv using Vulkan rendering (mpv --vo=gpu --gpu-api=vulkan).
  3. Played HDR video in VLC, checked that HDR-to-SDR gamut conversion worked.

Diff Detail

Repository
R4851 libplacebo
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

aleksvor created this revision.Sat, Sep 11, 6:56 AM
aleksvor requested review of this revision.Sat, Sep 11, 6:56 AM
aleksvor edited the summary of this revision. (Show Details)Mon, Sep 13, 10:43 AM
JoshStrobl accepted this revision.Wed, Sep 15, 3:14 PM
JoshStrobl added a subscriber: JoshStrobl.

LGTM, thanks!

This revision is now accepted and ready to land.Wed, Sep 15, 3:14 PM
This revision was automatically updated to reflect the committed changes.