Page MenuHomeSolus

Update libplacebo to 2.72.0
ClosedPublic

Authored by aleksvor on Jun 12 2020, 8:12 AM.
Referenced Files
F11022350: D9044.diff
Mon, Aug 7, 11:40 PM
F10877870: D9044.id21757.diff
Jun 20 2023, 11:41 PM
F10877539: D9044.id21734.diff
Jun 20 2023, 8:34 PM
F10870415: D9044.diff
Jun 18 2023, 9:11 AM
F10767714: D9044.id21734.diff
May 20 2023, 1:46 AM
Subscribers

Details

Summary

Summarized changelog:

  • Additions:
    • Add pl_swapchain_hdr_metadata, to set HDR metadata on supported swapchains (currently only Vulkan with VK_EXT_hdr_metadata).
    • Add support for Vulkan versions higher than 1.0, communicated via the new fields api_version and max_api_version.
    • Add support for GPU-assisted validation and best practices layers, via the new field pl_vk_inst_params.debug_extra.
    • Add field pl_vulkan_params.device_uuid to allow choosing the Vulkan device by its UUID.
    • Add function pl_vulkan_import, to allow directly re-using an existing VkDevice rather than creating a new one; this requires communicating metadata about how the device was created.
    • Add support for mpv-style custom user shaders (.hook), using the set of functions in <libplacebo/shaders/custom.h>.
    • Add pl_render_high_quality_params, enabling debanding and EWA scaling.
    • Add pl_timer GPU resource type and associated API functions, allowing the GPU execution time of shaders and texture transfer operations to be measured directly.
    • Add pl_image_set_chroma_location to automatically apply the correct chroma location to any subsampled planes.
    • Add PL_TONE_MAPPING_BT_2390, a tone mapping function based on the EETF from ITU-R Report BT.2390 (and make it the default).
    • Add pl_peak_detect_params.overshoot_margin to help combat clipping on certain types of rapid scene fade-ins.
  • Changes:
    • Deprecate pl_image.width/height, which are now inferred automatically from the actual planes.
    • Change pl_dispatch_compute to allow optionally passing in a simulated framebuffer width/height, which will be used to translate vertex attributes (if any).
    • Remove debanding from pl_render_default_params.
    • Refactor HDR<->SDR mapping; PL_COLOR_REF_WHITE has been removed and replaced by PL_COLOR_SDR_WHITE (203 cd/m^2) and PL_COLOR_SDR_WHITE_HLG (75% HLG), respectively.
    • Completely refactor pl_shader_av1_grain, which now samples directly from the passed texture rather than requiring the color be pre-sampled.
    • pl_render_image now infers the image primaries based on resolution, rather than always hard-coding PL_COLOR_SPACE_UNKNOWN as BT.709.
    • Change pl_render_target.dst_rect from pl_rect2d to pl_rect2df, allowing more accurate aspect ratio handling, and correctly compensate for subpixel scaling ratios.
    • Require mako as a dependency of the vulkan feature.
    • pl_chroma_location_offset now treats PL_CHROMA_UNKNOWN as PL_CHROMA_LEFT, the de-facto standard chroma location.
    • The default value of pl_color_map_params.tone_mapping_algo is now PL_TONE_MAPPING_BT_2390.
  • Fixes and performance improvements:
    • Properly mark some shader failures (pl_shader_is_failed).
    • Skip redundant matrix multiplication in pl_shader_encode_color wherever possible.
    • Work around driver bugs w.r.t out-of-order buffer offsets by sorting all buffer variables by offset.
    • Fix excessive CPU usage in pl_tex_download.
    • Reduce the number of unnecessary GPU flushes caused by pl_buf_poll.
    • Fix issue where blending did not work on some drivers (e.g. Nvidia).
    • Make the framebuffer discard check more aggressive.
    • Fix computation of anti-aliased resizable orthogonal filters, e.g. when downscaling using pl_filter_lanczos.
    • Fix external image memory barriers for exclusive mode images.
    • Fix various GLSL compatibility issues with AV1 grain generation.
    • Reduce maximum Vulkan memory allocation slab size to conform to AMD recommendations.
    • Fix double-application of texture scale for e.g. 10-bit content when using separable scalers.
    • Fix a multitude of bugs affecting AV1 grain generation, especially for chroma planes.
    • Fix segfault on Vulkan device OOM.
    • Fix a multitude of bugs, edge cases and subtle off-by-ones related to chroma scaling and plane alignment.
    • Minimize FBO usage inside pl_renderer, by re-using unused FBOs.
    • Tweak the work group size for polar scaling to perform better on modern GPUs (tested on RDNA).
    • Transparently upgrade fragment shaders to compute shaders on environments with async compute.
    • Pick a more reasonable size for the dummy GPU's max_group_threads.
    • Forbid 10-bit linear transfer functions from Vulkan swapchains.
    • Fix segfault when re-executing previously failed shaders.
    • Explicitly mark all shader resources as non-aliased.
    • Correctly specify shader storage buffers as coherent for shaders that require them.

Full changelog here.

Test Plan
  1. Rebuilt mpv and vlc against this version.
  2. Checked Vulkan output in mpv.
  3. Checked HDR->SDR conversion in VLC.

Diff Detail

Repository
R4851 libplacebo
Lint
Lint Not Applicable
Unit
Tests Not Applicable