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.