1399 lines
67 KiB
Plaintext
1399 lines
67 KiB
Plaintext
-------------------------------------------------------------------
|
||
Tue Jul 2 13:43:01 UTC 2024 - llyyr <llyyr@yukari.in>
|
||
|
||
- Update libplacebo to version 7.349.0. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v7.349.0
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Mar 26 07:10:05 UTC 2024 - Max Lin <mlin@suse.com>
|
||
|
||
- Build libplacebo with python 3.11 on Leap 15
|
||
- Build with a recent gcc version Leap 15 had
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Jan 22 18:08:41 UTC 2024 - llyyr <llyyr@yukari.in>
|
||
|
||
- Update libplacebo to version 6.338.2. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v6.338.2
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Oct 17 13:20:06 UTC 2023 - llyyr <llyyr.public@gmail.com>
|
||
|
||
- Update libplacebo to version 6.338.1. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v6.338.1
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Sep 26 11:24:32 UTC 2023 - llyyr <llyyr.public@gmail.com>
|
||
|
||
- Update libplacebo to version 6.338.0. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v6.338.0
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Aug 4 04:01:37 UTC 2023 - llyyr <llyyr.public@gmail.com>
|
||
|
||
- Update libplacebo to version 6.292.1. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v6.292.1
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Jul 6 21:43:07 UTC 2023 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 6.292.0. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v6.292.0
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Mar 23 15:01:17 UTC 2023 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 5.264.1. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v5.264.0
|
||
- Bump meson dependency to 0.63
|
||
|
||
-------------------------------------------------------------------
|
||
Sun Mar 19 09:56:56 UTC 2023 - Jan Engelhardt <jengelh@inai.de>
|
||
|
||
- Add baselibs.conf (for the sake of ffmpeg)
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Mar 13 17:16:12 UTC 2023 - llyyr <llyyr.public@gmail.com>
|
||
|
||
- Update libplacebo to version 5.264.0. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v5.264.0
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Feb 28 16:40:45 UTC 2023 - Callum Farmer <gmbr3@opensuse.org>
|
||
|
||
- Correct BR from python3-jinja2 to python3-Jinja2, fixes
|
||
dependency resolving on older distro
|
||
|
||
-------------------------------------------------------------------
|
||
Wed Jan 4 16:22:00 UTC 2023 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 5.229.2. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v5.229.2
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Nov 1 20:08:38 UTC 2022 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 5.229.1. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v5.229.1
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Oct 27 12:50:14 UTC 2022 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 5.229.0. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v5.229.0
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Jul 15 23:31:37 UTC 2022 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 4.208.0. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v4.208.0
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Feb 3 15:59:08 UTC 2022 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 4.192.1. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v4.192.1
|
||
|
||
-------------------------------------------------------------------
|
||
Sun Jan 30 17:08:01 UTC 2022 - Enrico Belleri <idesmi@protonmail.com>
|
||
|
||
- Update nuklear.h to 4.9.5
|
||
- Add dav1d dependency
|
||
|
||
-------------------------------------------------------------------
|
||
Wed Jan 19 12:10:24 UTC 2022 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 4.192.0. See details in:
|
||
https://code.videolan.org/videolan/libplacebo/-/tags/v4.192.0
|
||
- Add libunwind dependency
|
||
- Bump meson dependency version to match upstream
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Sep 7 09:09:22 UTC 2021 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 4.157.0:
|
||
|
||
This is a major new release involving a significant overhaul of the
|
||
public API, full thread safety, support for Direct3D 11 / Win32 /
|
||
MSVC, native HDR output, and more.
|
||
|
||
The primary way of accessing most libplacebo objects has been revamped.
|
||
Rather than writing e.g. `const struct pl_tex *image`, users now simply
|
||
write `pl_tex image`. In addition, the `struct pl_context *ctx` was
|
||
universally refactored and replaced by `pl_log log`, with no concern
|
||
besides logging.
|
||
|
||
Direct3D 11 is now natively supported by libplacebo, and compiling on
|
||
Windows in general has been made more straightforward.
|
||
|
||
The entire API was revamped to be thread safe by default, even when
|
||
using OpenGL (assuming the user provides the appropriate context binding
|
||
callbacks). Accompanying this change, the `pl_queue` has been rewritten
|
||
with multi-threaded decoding loops in mind. See the accompanying
|
||
`plplay` demo for an illustration.
|
||
|
||
Finally, this release brings with it a lot of features for feature
|
||
parity with mpv, such as the ability to get pass stats / timings,
|
||
oversample scaling, and more.
|
||
|
||
Additions:
|
||
- add a `void *user_data` field to `pl_frame`, with no further
|
||
interpretation by libplacebo
|
||
- add `pl_queue_push_block`, useful for multi-threaded decoding loops
|
||
- add a `uint64_t timeout` to `pl_queue_update`, allowing it to
|
||
block until frames are available even when not using a `get_frame`
|
||
callback
|
||
- make `pl_queue_update` also return valid data when failing with
|
||
PL_QUEUE_MORE, allowing access to partial/incomplete mix outputs
|
||
- allow calling `pl_render_image` on `image == NULL`, to render overlays
|
||
only
|
||
- add `pl_get_buffer2`, API-compatible with AVCodecContext.get_buffer2
|
||
- add support for blitting from/to several obscure formats such as
|
||
a1rgb5 or 64-bit integer formats
|
||
- add `pl_tex_clear_ex` to support clearing integer textures
|
||
- add `pl_render_params.ignore_icc_profiles`, for debugging
|
||
- add `pl_queue_params.interpolation_threshold`, to allow disabling
|
||
frame mixing when the source FPS approximately matches the display FPS
|
||
- always accept DRM_FORMAT_MOD_INVALID for texture imports
|
||
- add extra windowing functions to <libplacebo/filters.h>
|
||
- add the `pl_fmt.gatherable` capability
|
||
- add `pl_shader_sample_oversample`, a variant of nearest-neighbour
|
||
that preserves pixel aspect ratios - good for pixel art
|
||
- add `pl_scale_filters` alongside `pl_frame_mixers`
|
||
- add support for compile-time specialization constants (`pl_constant`),
|
||
and use them to speed up recompilation of shaders with hard-coded
|
||
constants
|
||
- add `pl_render_params.dynamic_constants`, which lifts hard-coded
|
||
constants to dynamic variables - useful for scenarios in which render
|
||
parameters are expected to change very frequently
|
||
- add more PL_COLOR_TRC_GAMMAxx definitions
|
||
- 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.
|
||
- add `pl_shader_res.description` and `pl_shader_res.steps`, containing
|
||
more friendly names for shaders plus a detailed list of operations
|
||
that shader is performing
|
||
- add callbacks to `pl_dispatch` and `pl_renderer` for informing users
|
||
of executed passes and their execution times
|
||
- add support for the Direct3D 11 graphics API
|
||
- add `pl_swapchain_colorspace_hint`, replacing
|
||
`pl_swapchain_hdr_metadata` as the new way to update swapchain
|
||
colorspace metadata at runtime. This can be used to e.g. switch
|
||
between HDR and SDR mode, for supported swapchains
|
||
- add `pl_peak_detect_params.minimum_peak`, allowing users to constrain
|
||
the detected peak values to only be sensible (e.g. above 1.0)
|
||
|
||
Changes:
|
||
- simplify the `shaderc` pkg-config check - rather than querying for
|
||
`shaderc_shared.pc`, `shaderc_combined.pc` etc, simply check for
|
||
`shaderc.pc`, matching upstream
|
||
- 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
|
||
- `struct pl_overlay` has been refactored completely to allow for
|
||
overlays with more than one part per texture. The only way of using
|
||
this struct is deprecated
|
||
- prefix `enum pl_queue_status` members by `PL_`, fixing an oversight in
|
||
the previous version of this API
|
||
- 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>
|
||
- add `typedefs` to all public-facing object types, o make them shorter
|
||
to reference. For example, `const struct pl_tex *tex` is now simply
|
||
`pl_tex tex`. This change affects almost every type of object in
|
||
libplacebo. The old way of referencing these objects is still
|
||
possible, but considered deprecated. Note that due to C++-specific
|
||
reasons, C++ users *must* upgrade their codeto the new API style
|
||
- remove PL_PRIM_TRIANGLE_FAN
|
||
- 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
|
||
- rename `pl_oversample_frame_mixer` to `pl_filter_oversample`, and
|
||
allow using it for image scaling as well
|
||
- change `pl_color_space_monitor` from PL_COLOR_TRC_GAMMA22 to UNKNOWN
|
||
- change the signature of `pl_shader_(de)linearize` slightly
|
||
- significantly increase the default strengths of the desaturation
|
||
settings in`pl_color_map_params`, to mimic the hollywood feel
|
||
- refactor `pl_glsl_desc` and `pl_gpu_caps` completely, in favor of the
|
||
new structs `pl_glsl_version` and `pl_gpu_limits`, with new members.
|
||
The old API is still available for the time being, but deprecated
|
||
|
||
Fixes and performance improvements:
|
||
- fix possible use-after-free in `plplay`
|
||
- don't explode `pl_queue` on NaN/Infinity/weird PTS values
|
||
- fix edge case involving plane merging for cropped images
|
||
- improve `plplay` by using threaded libplacebo APIs
|
||
- several fixes for edge cases in <libplacebo/utils/libav.h> helpers
|
||
- several fixes for 32-bit platforms (e.g. integer overflows)
|
||
- fix blending edge cases involving overlays and alpha channels
|
||
- skip some unnecessary matrix multiplications for RGB content
|
||
- allow for some small backwards PTS jumps in `pl_queue_update`
|
||
- fix drawing overlays to subsampled targets
|
||
- `pl_dispatch` now garbage collects old, unused passes to free up RAM
|
||
- various improvements to debug/diagnonstic printouts
|
||
- allow blitting from e.g. 2D to 3D textures
|
||
- 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
|
||
- properly allow building against vulkan headers without linking to the
|
||
vulkan loader
|
||
- C++ compatibility for public headers
|
||
- improve performance of textureGather-based polar sampling, especially
|
||
for radius 2 and 4
|
||
- fix vulkan texture handle capabilities check, again
|
||
- don't include superfluous pNext chains, fixes undefined behavior
|
||
- fix crash on edge case when shader compilation fails
|
||
- infer unsampled alpha channels as 1.0, rather than 0.0
|
||
- properly infer `target->color` in `pl_render_image`
|
||
- properly tag the OpenGL swapchain as pl_color_space_monitor
|
||
- fix possible crash in pl_get_detected_peak
|
||
- fix several edge cases in pl_render_image_mix relating to LUTs,
|
||
3DLUTs, HDR peak detection and so on
|
||
- fix sig_peak inferral for HLG content
|
||
- several compatibility fixes for older GLSL, and GLES 2.0
|
||
- fix possible use-after-free in pl_shader_custom
|
||
- fix `pl_color_map_params.gamut_clipping` for HDR targets
|
||
- reduce the number of redundant color space transformations required
|
||
for frame mixing
|
||
- fix edge case in pl_dispatch_save for some ancient GL drivers
|
||
- several fixes for LLVM/MinGW/MSVC
|
||
- fix bug where pl_pass_run incorrectly invalidated/accessed
|
||
`params->target` even for compute shaders
|
||
- add windows compatibility to several demo programs
|
||
- fix the pl_fmt <-> DRM fourcc format mapping table
|
||
- fix inappropriate texture access function for generated samplers with
|
||
the sampler2D API
|
||
- avoid generating spurious EGL errors when probing for EGL format
|
||
modifiers
|
||
- fix various typis in the documentation
|
||
|
||
-------------------------------------------------------------------
|
||
Fri May 7 09:51:50 UTC 2021 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 3.120.3:
|
||
|
||
This minor release fixes a number of regressions surrounding memory
|
||
imports and DRM modifiers, specifically aimed at issues that arose with
|
||
mpv's --hwdec=vaapi.
|
||
|
||
Changes:
|
||
- `pl_fmt.modifiers` now always includes DRM_FORMAT_MOD_INVALID on
|
||
OpenGL, which instructs the implementation to not specify modifiers
|
||
- passing a DRM modifier not in the list of supported modifiers is now
|
||
considered a hard error, to rule out non-working hwaccel formats
|
||
|
||
Fixes:
|
||
- fix a crash when using sampling shaders on textures with unknown formats
|
||
- fix improperly specified SDL header imports in the demos
|
||
- fix an issue where the vulkan texture handle capabilities were testing
|
||
for presence of the wrong extension
|
||
- fix an issue where non-enabled DRM modifier structs were accidentally
|
||
linked into the pNext chain, causing issues with some drivers
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Apr 19 08:27:57 UTC 2021 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 3.120.2:
|
||
|
||
This minor release fixes a number of additional bugs related to the
|
||
thread queue, included demos, included helpers, and build system.
|
||
|
||
Changes:
|
||
- replace the `shaderc` library checks by pkg-config checks
|
||
- `pl_dispatch` no longer grows infinitely, but prunes stale cache
|
||
entries after a certain threshold
|
||
- improve logging of GPU capabilities (including format capabilities)
|
||
|
||
Fixes and performance improvements:
|
||
- fix a typo on an error message
|
||
- fix a use-after-free edge case in `plplay`
|
||
- filter out Infinity, NaN and other values from fps/vps estimates
|
||
- add several warnings for suspected frame queue API misuses
|
||
- fix a crash when combining pl_render_image_mix with cropped frames
|
||
- fix a crash on AV_PIX_FMT_NONE in the libav helpers
|
||
- fix the loading of overlays in the `sdlimage` demo
|
||
- fix a number of potential overflows on 32-bit platforms
|
||
- omit redundant identity matrices in pl_shader_decode_color
|
||
- fix crash in frame queue with certain out-of-order PTS sequences
|
||
- add missing link to vulkan dependency in the `video-filtering` demo
|
||
- correctly shift overlays when drawing to subsampled YCbCr planes
|
||
- add missing check for PL_GPU_CAP_CALLBACKS in `utils/{libav,dav1d}.h`
|
||
- improve handling of asynchronous texture uploads in `utils/libav.h`
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Apr 6 06:57:44 UTC 2021 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 3.120.1:
|
||
|
||
This hotfix release fixes a number of minor issues with the v3.120.0
|
||
release, and also modularizes the included demo programs to cut down on
|
||
the number of compiled binaries.
|
||
|
||
Changes:
|
||
- hexadecimal strings in custom shaders may now include whitespace
|
||
- added 16-bit half float formats to the dummy pl_gpu
|
||
- significantly reduced verbosity of the included demo programs
|
||
- merged all of the demo program variants into a single binary that
|
||
picks the best windowing system / graphical API at runtime
|
||
- install `plplay` when demos are enabled
|
||
|
||
Fixes and performance improvements:
|
||
- fixed an integer overflow in a texture bounds check
|
||
- fixed a false positive error in the test framework on 32-bit platforms
|
||
- fixed some minor issues with various outdated comments
|
||
- fixed a potential use-after-free in the `plplay` demo program when
|
||
playing files containing embedded ICC profiles
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Apr 2 13:21:38 UTC 2021 - Niklas Haas <obs@haasn.xyz>
|
||
|
||
- Update libplacebo to version 3.120.0. (Upstream changelog appended)
|
||
- Create a new package `plplay` for the included demo program. This requires
|
||
bundling a copy of `nuklear.h`, which is single-header library not included
|
||
as part of the libplacebo source distribution.
|
||
|
||
This is a feature release, introducing frame mixing, DRM format
|
||
modifiers, and support for custom LUTs -, while also greatly expanding
|
||
the available demo programs, in particular the `plplay` video player.
|
||
|
||
The main highlight is the new `pl_queue` abstraction living in
|
||
<libplacebo/utils/frame_queue.h>. This greatly simplifies the core of a
|
||
libplacebo-based video renderer by translating a stream of input frames
|
||
into an array of GPU-mapped textures suitable for frame mixing, given a
|
||
corresponding vsync timestamp. New frames can be delivered to this API
|
||
using a push or pull model, and they are lazily uploaded on an as-needed
|
||
basis as well as internally garbage collected when no longer needed.
|
||
This abstraction also contains all needed machinery for estimating
|
||
source/display framerates by comparing and averaging timestamps, freeing
|
||
users from the burden of having to accurately determine this information
|
||
a priori.
|
||
|
||
Also worth mentioning is the addition of support for custom LUTs,
|
||
currently only in Adobe's .cube format. They can be applied flexibly at
|
||
a number of locations in the video processing pipeline, including as a
|
||
replacement for YUV<->RGB conversion or tone/gamut mapping, and fed with
|
||
either normalized linear light or native-gamma values.
|
||
|
||
Among the included demo programs, the `plplay` example video player has
|
||
been greatly expanded - adding support for a settings GUI (based on
|
||
nuklear), frame timing and mixing, custom shaders, and more. This
|
||
example video player now serves as a convenient platform to demonstrate
|
||
all of libplacebo's advanced rendering features.
|
||
|
||
Finally, all of libplacebo now contains only code written entirely from
|
||
scratch (rather than deriving from mpv), opening up the possibility to
|
||
explore different licenses besides the current LGPLv2.1+. In particular,
|
||
permissive (MIT/BSD-style) licenses are being considered.
|
||
|
||
Additions:
|
||
- add asynchronous GPU callbacks, specifically to `pl_tex_transfer`,
|
||
allowing for non-blocking host memory transfer operations
|
||
- add `pl_shared_mem.stride_w/h` to control dmabuf pitch
|
||
- add `pl_render_image_mix` to blend multiple frames into a single
|
||
output image, given relative timestamp information
|
||
- add the `pl_filter_mitchell_clamp` filter preset
|
||
- add `pl_render_params.preserve_mixing_cache` to speed up redraws after
|
||
renderer size changes when frame mixing is active
|
||
- add <libplacebo/utils/dav1d.h> to help with Dav1dPicture mapping
|
||
- implement `PL_HANDLE_HOST_PTR` for the OpenGL backend
|
||
- implement drm format modifiers for vulkan
|
||
- add a new field `pl_fmt.modifiers` for DRM format modifier negotiation
|
||
- add new header <libplacebo/shaders/lut.h> to load custom LUTs
|
||
(currently only supporting the .cube format)
|
||
- add `index_data/buf` to `pl_pass_run_params`, adding support for
|
||
indexed vertex data when dispatching shader passes
|
||
- add `pl_dispatch_vertex` to allow dispatching fragment shaders using
|
||
a list of custom vertices with custom vertex attributes
|
||
- add `pl_frame_recreate_from_avframe` and `pl_download_avframe` to help
|
||
downloading GPU textures back into AVFrame form
|
||
- add a new header <libplacebo/utils/frame_queue.h> to assist in taking
|
||
a stream of (Frame, PTS) pairs as well as a list of VSync times and
|
||
turning them into a stream of `pl_frame_mix` structs
|
||
- add `pl_white_from_temp` and `pl_color_adjustment.temperature` to
|
||
apply white point adjustments between correlated color temperatures (K)
|
||
- add `pl_filter_preset.description` containing a longer, human-readable
|
||
name for a given filter preset
|
||
|
||
Changes:
|
||
- `pl_3dlut_params` has been renamed `pl_icc_params`
|
||
- `pl_render_params.force_3dlut` has been renamed `force_icc_lut`
|
||
- `pl_3dlut_update/apply` have been renamed to `pl_icc_update/apply` and
|
||
moved to a (conditionally installed) new header <libplacebo/shaders/icc.h>
|
||
- `pl_upload_plane` no longer initializes `out_plane->shift_x/y` to 0,
|
||
instead leaving them unmodified (to avoid clobbering existing shift data)
|
||
- `pl_filter_box` has been renamed to `pl_filter_nearest`
|
||
- `pl_filter_triangle` has been renamed to `pl_filter_bilinear`
|
||
- `pl_render_params.frame_mixer = NULL` now disables frame mixing - to
|
||
get back the old behaviour, set this to `&pl_oversample_frame_mixer`.
|
||
- `pl_color_map_params.gamut_warning` now highlights out-of-gamut colors
|
||
in bright pink, rather than the old (ill-defined) inversion behaviour
|
||
- `pl_named_filter_config` has been renamed to `pl_filter_preset`
|
||
- `pl_find_named_filter` has been renamed to `pl_find_filter_preset`
|
||
- ditto for `pl_named_filter_function` and `pl_filter_function_preset`
|
||
|
||
Fixes and performance improvements:
|
||
- fix buffer overflow in custom shader STORAGE blocks
|
||
- fix include path for glslang >= 11.0.0
|
||
- actually enable shader subgroup operations for HDR peak detection
|
||
- fix locale dependence of shader parsing primitives
|
||
- fix AVCOL_SPC_SMPTE170M mapping
|
||
- fix wrong color space selection in `pl_vulkan_create_swapchain`
|
||
- work-around low UBO size limits on some platforms
|
||
- fix compilation issues on C++ due to the use of reserved identifiers
|
||
- fix `pl_get_detected_peak` on platforms without host-visible SSBOs
|
||
- fix edge case in vulkan texture handle capabilities check
|
||
- fix suboptimal mutex destruction code
|
||
- skip peak detection when outputting to HDR displays
|
||
- fix edge cases in shader LUT type selection logic
|
||
- avoid redundant scaling passes when scaling anamorphic content
|
||
- merge similar planes before dispatching heavy shaders (e.g.
|
||
debanding, hooks)
|
||
- avoid scaling passes for certain small fractional scaling steps
|
||
- entirely avoid processing unneeded components when dispatching scalers
|
||
- avoid using more components than necessary for intermediate FBOs
|
||
- fix out-of-bounds read for small non-cropped emulated textures
|
||
- avoid thrashing the shader cache when reinitializing OpenGL FBOs
|
||
- fix incorrect include in <libplacebo/opengl.h>
|
||
- fix vk.xml priority issue on windows
|
||
- fix undefined behaviour / GPU hangs in HDR peak detection shader
|
||
- fix incorrect forwarding of DRM modifiers to the OpenGL backend
|
||
- fix crash on AV_PIX_FMT_FLAG_BAYER
|
||
- fix various compilation issues on certain platforms
|
||
- fix obscure edge-case in floating point printing routine
|
||
- `pl_render_params.force_icc_lut` now excludes no-op cases
|
||
- fix handling of custom shader COMPUTE blocks
|
||
- correctly apply hue and saturation controls for non-YCbCr color spaces
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Jan 1 19:37:02 UTC 2021 - Mia Herkt <mia@0x0.st>
|
||
|
||
- Update to version 3.104.0
|
||
This is a major release, introducing many new features and
|
||
modifications. Most importantly, libplacebo now interoperates well
|
||
with FFmpeg's libav* abstractions. This is primarily exposed via a
|
||
new set of helpers, <libplacebo/utils/libav.h>, implemented as a
|
||
single header library. In addition to this, a number of other
|
||
supporting changes have been made to the API, most notably the
|
||
unification of `pl_image` and `pl_render_target` into a single
|
||
`pl_frame` concept, similar in spirit to AVFrame. As such,
|
||
libplacebo now supports **rendering to planar targets**, including
|
||
subsampled YCbCr.
|
||
|
||
Besides the libav* compatibility changes, this release also brings
|
||
with it a new feature for custom shaders: buffer blocks, and
|
||
persistent storage. This can be used by third parties to implement
|
||
stateful shaders (e.g. motion interpolation or temporal
|
||
deinterlacing), or be leveraged to speed up some shaders by
|
||
combining multiple passes into one.
|
||
|
||
Finally, various import/export procedures have been expanded,
|
||
including the ability to import host pointers and real-world
|
||
DMABUFs.
|
||
|
||
Additions:
|
||
* add `pl_memory_qualifiers`, plus a corresponding
|
||
`pl_shader_desc.memory`, to allow attaching GLSL memory
|
||
qualifiers (coherent, volatile etc.) to shader descriptors
|
||
* add functions `pl_dispatch_save` and `pl_dispatch_load` to
|
||
allow saving/restoring the contents of an entire
|
||
`pl_dispatch`'s cache
|
||
* add functions `pl_renderer_save` and `pl_renderer_load` to
|
||
allow saving/restoring the contents of an entire
|
||
`pl_renderer`'s cache
|
||
* add `pl_vulkan_swapchain_params.prefer_hdr`, which will cause
|
||
the surface format selection logic to try HDR output formats
|
||
first
|
||
* add `pl_buf_copy` to copy from one buffer to another
|
||
* add `pl_get_detected_peak`, to read back the result of peak
|
||
detection
|
||
* add `pl_primaries_superset` to test if one set of primaries is
|
||
fully enclosed by another
|
||
* add `pl_color_map_params.gamut_clipping`, which will
|
||
colorimetrically clip any out-of-gamut colors by desaturating
|
||
them towards neutral gray until they're in-gamut, rather than
|
||
clipping per channel as before
|
||
* add `PL_GPU_CAP_SUBGROUPS` and `pl_gpu_limits.subgroup_size`,
|
||
to expose GLSL subgroup functionality via the `pl_gpu`
|
||
interface
|
||
* add `pl_gpu_is_failed`, to query at a high level whether the
|
||
`pl_gpu` is in some internal failure state. GPUs in this state
|
||
should be recreated, using the appropriate mechanism
|
||
* add `pl_shader_custom`, to allow injecting arbitrary custom
|
||
GLSL code into a `pl_shader`.
|
||
* add `pl_buf_params.import_handle` to allow importing buffers
|
||
* add `PL_HANDLE_HOST_POTR`, to allow importing arbitrary host
|
||
pointers
|
||
* add `pl_pass_run_params.vertex_buf`, to allow drawing vertex
|
||
data directly from a `pl_buf`, guarded by
|
||
`pl_gpu_limits.max_vbo_size`
|
||
* add `_COUNT` members to all public enums, for consistency
|
||
* add `pl_shared_mem.drm_format_mod`, to allow communicating
|
||
DRM format modifiers when importing/exporting textures
|
||
* add support for importing DMABUFs via EGL, via the new fields
|
||
`pl_opengl_params.egl_display/context`
|
||
* add `pl_fmt.fourcc` to facilitate mapping between `pl_fmt` and
|
||
DRM
|
||
* add the missing `pl_var_*` helpers, for consistency
|
||
* add `pl_plane_data_align` to help with aligning
|
||
`pl_plane_data` structs to byte boundaries
|
||
* add support for STORAGE textures in user shaders, which can be
|
||
used to persist data across separate invocations of the shader
|
||
* add support for BUFFER blocks in user shaders, which can be
|
||
used to create UBOs or SSBOs for use inside shaders, the latter
|
||
of which can also persist across frames and be used to store
|
||
persistent state
|
||
* add PL_COLOR_PRIM_EBU_3213 and PL_COLOR_PRIM_FILM_C
|
||
* add a new header <libplacebo/utils/libav.h>, containing a
|
||
variety of helper functions for interoperating between libav*
|
||
and libplacebo
|
||
* add `demos/plplay.c` to serve as a demonstration of how to make
|
||
a trivial playback loop with libavcodec and libplacebo
|
||
* add `pl_sample_src.component_mask` to allow sampling an
|
||
arbitrary subset of the available components from a plane
|
||
* add `pl_frame_is_cropped` and `pl_frame_clear` to assist in
|
||
properly clearing frames before rendering to them
|
||
* add `pl_tex_poll` to assist in interoperating with some
|
||
external APIs
|
||
* add `pl_render_params.blend_params` to allow blending the final
|
||
output
|
||
|
||
Changes:
|
||
* remove `pl_image.signature` and
|
||
`pl_render_params.skip_redraw_caching`
|
||
* change vulkan surface format selection to prioritize formats by
|
||
'score', preferring higher depth integer formats
|
||
* `pl_fmt` may now have PL_FMT_CAP_STORABLE even when
|
||
`glsl_format` is NULL, in which case formatless image storage
|
||
must be used
|
||
* `pl_buf_read` no longer requires `buf_offset` be a multiple of
|
||
4
|
||
* `pl_buf_*` commands are now synchronized internally:
|
||
* `pl_buf_write` and `pl_buf_read` now block while the buffer is
|
||
in use Note: for this reason, `pl_buf_write` should not be used
|
||
in loops
|
||
* `pl_tex_upload/download` may now be called on in-use buffers
|
||
* allow `pl_dispatch_compute` on shaders with outputs, including
|
||
the ability to automatically determine the number of work
|
||
groups based on the shader output resolution
|
||
* remove `pl_buf_params.type`, and the concept of buffer types in
|
||
general. `pl_buf` is now a generic catch-all for any type of
|
||
buffer, with individual capabilities in `pl_buf_params`
|
||
determinig what type of shader operations it can be used for
|
||
* relax the alignment requirements on `pl_tex_transfer_params`
|
||
* change `pl_opengl_wrap_params` to allow directly importing
|
||
framebuffers in addition to textures
|
||
* rename `pl_color_levels` members for clarity
|
||
* make `pl_opengl` ignore software rasterizers by default, unless
|
||
the new field `pl_opengl_params.allow_software` is set
|
||
* add `pl_av1_grain_params.luma_comp` to allow drawing the luma
|
||
component from a channel with nonzero index
|
||
* `pl_renderer` now supports rendering to planar targets,
|
||
including subsampled targets
|
||
* `pl_image` and `pl_render_target` have been removed and unified
|
||
into a single `pl_frame` concept
|
||
* remove `pl_tex_params.sample_mode/address_mode` and move them
|
||
to `pl_desc_binding` instead, to decouple them from texture
|
||
creation
|
||
* refactor the signature of `pl_tex_blit`
|
||
|
||
Fixes and performance improvements:
|
||
* fix an oversight where `pl_buf_destroy` delayed some buffer
|
||
destructions unnecessarily
|
||
* fix a limitation where `pl_tex_destroy` sometimes delayed
|
||
destroying textures unnecessarily
|
||
* improve the performance of `pl_dispatch`'s code for assembling
|
||
UBOs
|
||
* improve the performance of `pl_shader_av1_grain` by switching
|
||
from SSBOs to texture LUTs, also improving compatibility with
|
||
older GL
|
||
* improve the performance of `pl_shader_detect_peak` on GPUs with
|
||
access to subgroups operations
|
||
* fix an issue where reinitializing shader state objects with
|
||
different settings sometimes resulted in undefined behaviour
|
||
* fix some GLSL backwards compatibility issues
|
||
* slightly cut down on unnecessary image layout transitions
|
||
* add some miscellaneous debug print-outs, and improve the
|
||
legibility of some existing log messages
|
||
* fix an issue where freeing buffer variables from shader
|
||
descriptors could result in use-after-free
|
||
* add support for vulkan memory imports requiring dedication
|
||
allocations
|
||
* slightly improve, and fix, the vulkan memory placement logic
|
||
* significantly improve the performance of `pl_tex_download` by
|
||
importing the target host pointer directly
|
||
* improve the performance of small LUTs, especially for the
|
||
non-compute polar fallback path
|
||
* prevent `pl_renderer` from unneccessarily applying a 3DLUT when
|
||
both the input and output frames have the same ICC profile
|
||
* fix the behaviour of partially specified `pl_bit_encoding`
|
||
structs
|
||
* fix the component ordering on some odd packed vulkan formats
|
||
* fix an issue where `pl_plane_data_from_mask` broke for high bit
|
||
depths
|
||
* make `pl_renderer` consult the dither bit depth from the
|
||
texture precision, if absent from `pl_bit_encoding`
|
||
* fix the behaviour of `pl_renderer` when sampling from textures
|
||
with swapped component orders
|
||
* fix the implementation of PL_COLOR_SYSTEM_BT_2100_HLG
|
||
* fix some issues relating to missing includes
|
||
* enforce legality of image usage parameters on `pl_vulkan_wrap`
|
||
* fix an undesired shader double-compilation when using
|
||
orthogonal scalers with subsampled chroma planes
|
||
* fix an issue where application of a 3DLUT cleared the alpha
|
||
channel
|
||
* add a missing extension to `pl_vulkan_recommended_extensions`
|
||
* fix the plane alignment code for oddly sized subsampled chroma
|
||
* fix the poor precision of `pl_shader_dither` for high bit
|
||
depths
|
||
* fix several possible overflows in the BT.2390 shader
|
||
* fix a bug where using a polar sampler to draw a scaled overlay
|
||
onto a non-storable target neglected to disable compute shaders
|
||
* fix a bug where the renderer could sometimes alias when
|
||
downscaling, in particular if both the upsampler and
|
||
downsampler are set to bicubic
|
||
* improve performance of scalers by avoiding bilinear filtering
|
||
* reduce verbosity of memory allocations
|
||
* fix missing PL_FMT_CAP_BLENDABLE on opengl fbos
|
||
* significantly improve precision of float literals in shaders
|
||
* add better error checking to gl_pass_create
|
||
|
||
-------------------------------------------------------------------
|
||
Sun Nov 22 03:24:14 UTC 2020 - Mia Herkt <mia@0x0.st>
|
||
|
||
- Update to version 2.72.2
|
||
This hotfix release fixes an additional glslang linking/build issue
|
||
that was missed in v2.72.1.
|
||
|
||
Bug fixes:
|
||
* fix linking issue with some installations of glslang >= 11.0.0
|
||
|
||
Changes for 2.72.1:
|
||
This release backports a number of bug fixes from master affecting
|
||
the v2.72.0 release, most notably extending the range of supported
|
||
glslang versions, as well as fixing the 3DLUT/ICC generation code.
|
||
|
||
Bug fixes:
|
||
* compatibility with glslang >= 8.13.3743
|
||
* compatibility with new glslang semantic versioning scheme
|
||
* fix broken shaders on some versions of GLES by defaulting to
|
||
32-bit precision for floating point math
|
||
* fix the vulkan API version passed to shaderc
|
||
* fix the extension check for glInvalidateTexImage
|
||
* fix pl_tex_create on older GLES versions
|
||
* fix OpenGL logging thread safety
|
||
* fix undefined memcmp() in pl_shader_av1_grain
|
||
* fix pl_render_target.repr being ignored by pl_render_image
|
||
* fix 3DLUT generation code (generated corrupt LUTs in all cases)
|
||
* fix symbol visibility on some versions of GCC
|
||
* fix potential overflow in BT.2390 shader
|
||
* properly restrict pl_shader_sample_polar to GLSL >= 130
|
||
* fix vulkan function loading of promoted core functions
|
||
|
||
Other changes:
|
||
* tiny performance gain in 3DLUT generation
|
||
* pl_opengl_create now logs GL_EXTENSIONS
|
||
* log some additional VkResult enum members
|
||
* improve several vulkan log messages by using friendly names of
|
||
enums
|
||
* add a copy of the config.h variables to the libplacebo.pc file
|
||
|
||
-------------------------------------------------------------------
|
||
Sun Jun 14 15:37:17 UTC 2020 - Mia Herkt <mia@0x0.st>
|
||
|
||
- Update to version 2.72.0
|
||
This is a major release with several key additions, most notably
|
||
being the support for custom, mpv-style "user shaders" (.hook),
|
||
giving us access to a large variety of pre-existing user shaders
|
||
such as RAVU, FSRCNNX, Anime4K, SSimSuperRes, KrigBilateral,
|
||
NNEDI3, and more.
|
||
|
||
In addition to this, major additions include a completely
|
||
refactored and fixed AV1 grain generation shader, support for
|
||
Vulkan versions higher than 1.0, support for GPU-based timers,
|
||
and improved interop APIs for both Vulkan and OpenGL, and new
|
||
and improved aspect ratio handling.
|
||
|
||
Finally, this release also brings with it a major change to the way
|
||
HDR and SDR content are mapped between each other, including a new
|
||
tone-mapping function based on the industry-standard
|
||
ITU-R BT.2390 EETF.
|
||
|
||
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 helper functions for working with pl_rects, including new
|
||
aspect ratio handling helpers (pl_rect2df_aspect_*)
|
||
* add field pl_vulkan_params.device_uuid to allow choosing the
|
||
vulkan device by its UUID
|
||
* add function pl_vulkan_hold_raw, to hold images without
|
||
actually transitioning its layout and access mode
|
||
* 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 field pl_vulkan_params.features to allow loading optional
|
||
extra device features at device creation time
|
||
* 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_SHADER_SIG_SAMPLER, allowing generated sampling shaders
|
||
to directly accept the sampler to use as function parameters
|
||
* 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
|
||
* add pl_sampler_type to allow encoding non-standard sampler
|
||
types such as sampler2DRect, and also generalize samplers to
|
||
allow e.g. usampler2D or isampler3D
|
||
* add pl_opengl_wrap and pl_opengl_unwrap, to allow directly
|
||
mapping between OpenGL textures and the pl_tex abstraction
|
||
|
||
Changes:
|
||
* deprecate pl_image.width/height, which are now inferred
|
||
automatically from the actual planes
|
||
* pl_vulkan_wrap now takes a pl_vulkan_wrap_params struct
|
||
instead of directly accepting its parameters, including new
|
||
fields sample_mode and address_mode to configure the created
|
||
sampler
|
||
* change pl_dispatch_compute to allow optionally passing in a
|
||
simulated framebuffer width/height, which will be used to
|
||
translate vertex attributes (if any)
|
||
* undefine disabled config.h features, instead of defining them
|
||
as 0
|
||
* 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 python3-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:
|
||
* fix shader generation when the GLSL version is explicitly
|
||
overridden
|
||
* properly mark some shader failures (pl_shader_is_failed)
|
||
* fix texture invalidation on OpenGL
|
||
* correctly respect pl_swapchain_frame.flipped in
|
||
pl_render_target_from_swapchain
|
||
* correctly validate descriptor uniqueness in pl_pass_create
|
||
* 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 edge cases in vulkan swapchain usage flag checks
|
||
* 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 failure path of pl_swapchain_submit_frame
|
||
* fix various GLSL compatibility issues with av1 grain generation
|
||
* reduce maximum vulkan memory allocation slab size to conform to
|
||
AMD recommendations
|
||
* fix build error when lcms is not available
|
||
* 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 invalid shader generation on some platforms
|
||
* fix a multitude of bugs, edge cases and subtle off-by-ones
|
||
related to chroma scaling and plane alignment
|
||
* add fallback code for edge case w.r.t chroma scaling and gpu
|
||
resource exhaustion
|
||
* correctly load VK_KHR_swapchain in all circumstances that
|
||
require accessing its functions
|
||
* 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
|
||
* fix swapchain creation errors on GLES 2
|
||
* explicitly mark all shader resources as non-aliased
|
||
* correctly specify shader storage buffers as coherent for
|
||
shaders that require them
|
||
* fix various memory barrier synchronization issues for opengl
|
||
|
||
|
||
-------------------------------------------------------------------
|
||
Wed May 6 04:56:38 UTC 2020 - Mia Herkt <mia@0x0.st>
|
||
|
||
- Update to version 2.43.1
|
||
This release backports a number of bug fixes from master affecting
|
||
the v2.43.0 release, and also slightly extends the range of
|
||
backwards compatibility with respect to vulkan-headers versions.
|
||
(This change is not on master, so this can be seen as a
|
||
compatibility release)
|
||
|
||
Bug fixes:
|
||
* fix GLSL version checks when overriding GLSL versions with
|
||
pl_shader_params.glsl
|
||
* fix minor order-of-operations issue in AV1 grain synthesis
|
||
* fix glInvalidate* backwards compatibility issue
|
||
* fix compilation with older vulkan-headers (e.g. ubuntu 18.04)
|
||
* fix a bug where pl_shader_encode_color sometimes uploaded and
|
||
applied an identity matrix unnecessarily
|
||
* work around upstream issues with MSL shader compilation by
|
||
ensuring all buffer elements are sorted by offset
|
||
* fix hypothetical edge case with swapchain image usages
|
||
forbidden by the swapchain image format
|
||
* fix an issue where blending overlays caused the rest of the
|
||
image to be discarded
|
||
|
||
Other changes:
|
||
* log the vulkan surface selection choices
|
||
* log the overall library version on initialization
|
||
* add a few more pl_gpu validation checks
|
||
* significantly reduce the CPU consumpation of blocking texture
|
||
downloads
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Apr 23 00:10:37 UTC 2020 - Mia Herkt <mia@0x0.st>
|
||
|
||
- Add libepoxy to BuildRequires
|
||
- Enable test suite
|
||
- Update to version 2.43.0
|
||
The major highlight of this release is the introduction of a new
|
||
OpenGL backend, documented in <libplacebo/opengl.h>, which is also
|
||
the reason for the major version bump.
|
||
|
||
Apart from the addition of OpenGL support, this release brings with
|
||
it a large number of fixes for backwards compatibility with older
|
||
versions of GLSL and GLES, allowing libplacebo to be used to
|
||
generate legal shaders for virtually any GLSL version in existence.
|
||
|
||
Supporting these changes, the test framework has been expanded
|
||
considerably to allow for automated testing of older OpenGL context
|
||
versions and older GLSL versions.
|
||
|
||
Additions:
|
||
* add pl_gpu.pci, containing the PCI address of the underlying
|
||
GPU
|
||
* add pl_image.av1_grain, allowing pl_renderer to add AV1 grain
|
||
* add pl_opengl backend (see <libplacebo/opengl.h>)
|
||
* add pl_color_levels_guess, to infer color levels from
|
||
pl_color_repr
|
||
* pl_shader_encode_color now handles non-linear color systems
|
||
* add pl_render_params.force_dither, to force use of the dither
|
||
code
|
||
* add pl_render_params.disable_fbos, to forcibly disable FBOs
|
||
* add pl_vk_inst_params.layers, to allow loading extra vulkan
|
||
layers
|
||
* add a way to restrict the maximum GLSL version provided by the
|
||
various pl_gpu backends, for testing purposes
|
||
|
||
Changes:
|
||
* load all vulkan function pointers indirectly, using a
|
||
user-provided vkGetInstanceProcAddr function
|
||
* vulkan can now be built without linking against libvulkan.so
|
||
* refactor av1 grain data struct, splitting it up into
|
||
"grain metadata" and "shader params"
|
||
* pl_swapchain_resize now recreates suboptimal swapchains even
|
||
if the size does not change
|
||
* pl_tex_blit now requires the new cap PL_GPU_CAP_BLITTABLE_1D_3D
|
||
for 1D/3D textures
|
||
* pl_tex_params.host_readable now requires the new cap
|
||
PL_FMT_CAP_HOST_READABLE on the chosen format
|
||
* pl_vk_inst_create will now automatically load any layers needed
|
||
for extensions specified by the user
|
||
|
||
Fixes and performance improvements:
|
||
* make pl_color_adjustment.gamma actually do something
|
||
* fix av1 grain shader for separated planes
|
||
* fix memory corruption in pl_vulkan_swapchain_suboptimal
|
||
* fix access mask on API writes to read-writable vulkan buffers
|
||
* fix some instances of undefined behavior in av1 grain synthesis
|
||
* fix av1 grain scale for PL_COLOR_LEVELS_UNKNOWN
|
||
* fix use of local #include for config.h in installed headers
|
||
* fix various incorrect literals for compatibility with older
|
||
GLSL
|
||
* fix potential type error in XYZ input handling
|
||
* fix numerous backwards compatibility issues for older GLSL and
|
||
GLES versions, across the board
|
||
* quench some meson warnings, as well as some compiler warnings
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Dec 24 15:21:06 UTC 2019 - Martin Herkt <9+suse@cirno.systems>
|
||
|
||
- Update to version 1.29.1
|
||
|
||
This is a minor bug fix follow-up, to address one major and two
|
||
minor issues with the v1.29.0 release.
|
||
|
||
Fixes:
|
||
* segfault in the test framework on platforms without vulkan
|
||
* error message spam when rendering to minimized/hidden windows
|
||
* compilation on certain glslang versions
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Dec 23 02:47:30 UTC 2019 - Martin Herkt <9+suse@cirno.systems>
|
||
|
||
- Update to version 1.29.0
|
||
The key highlights of this release are the change of pl_gpu API
|
||
semantics to use explicit erroring instead of implicit undefined
|
||
behavior, and several important bug fixes related to swapchain
|
||
resizing (in particular, handling of suboptimal swapchains);
|
||
as well as other minor utility changes, bug fixes and performance
|
||
improvements.
|
||
|
||
The new pl_gpu API allows clients to duplicate less code related
|
||
to checking parameters and capabilities, as long as they're fine
|
||
with the resulting error messages they might receive. In
|
||
particular, libplacebo no longer aborts on invalid parameters -
|
||
which helped during initial development, but is now suffocating
|
||
clients more than it's helping.
|
||
|
||
Additions:
|
||
* add a new field pl_fmt.internal_size, which can differ from
|
||
texel_size for emulated formats
|
||
* add 16f / 64f texture formats with host-emulated 32f
|
||
representation
|
||
* expose a pl_vulkan_choose_device helper function
|
||
* add a mechanism for allowing the user to explicitly resize
|
||
suboptimal swapchains rather than having libplacebo take care
|
||
of it
|
||
|
||
Changes:
|
||
* make pl_gpu log and error gracefully on illegal parameters
|
||
rather than doing undefined behavior (i.e. aborting)
|
||
* creating a host_mapped buffer now requires
|
||
PL_GPU_CAP_MAPPED_BUFFERS
|
||
* drop priv fields from public structs
|
||
|
||
Fixes and performance improvements:
|
||
* make libplacebo slightly less log spammy in general
|
||
* skip the creation/use of semaphores for single-queue usage
|
||
* fix several bugs related to swapchain recreation and image
|
||
acquisition
|
||
* fix creation of non-renderable but storable vulkan textures
|
||
* fix several bugs related to emulated texture downloads
|
||
* fix pl_fmt capabilities for some emulated formats
|
||
* fix stride/alignment of std430 vectors/matrices
|
||
* use push constants more aggressively, whenever possible
|
||
* slightly improve accurate of BT.2100 matrices
|
||
* fix overzealous rotation of vulkan queues
|
||
* fix dangling validation layer suppression in rare cases
|
||
* fix possible swapchain deadlock on VK_SUBOPTIMAL_KHR
|
||
* handle VK_SUBOPTIMAL_KHR more gracefully / efficiently
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Oct 21 23:34:37 UTC 2019 - Martin Herkt <9+suse@cirno.systems>
|
||
|
||
- Update to version 1.21.0
|
||
This is a minor / house-keeping release, mostly to get some
|
||
important fixes into distros while also getting support for iGPUs
|
||
requiring non-coherent memory into a "stable" release.
|
||
|
||
Additions:
|
||
* shaders.h API users can now override the GLSL version
|
||
* add support for vulkan platforms with non-coherent memory
|
||
(e.g. iGPUs)
|
||
|
||
Changes:
|
||
* default GLSL version is now 130 unless otherwise specified
|
||
* signature of pl_shader_alloc now uses a params struct
|
||
* PL_FIX_VER / PL_VERSION are no longer header constants
|
||
* the renderer will now automatically adjust deband grain scale
|
||
for HDR
|
||
|
||
Fixes and performance improvements:
|
||
* on GLSL < 130, shaders now correctly use texture2D etc.
|
||
* fix a bug where async transfer was never actually used, due to
|
||
incorrect alignment checks
|
||
* fixed some issues that could lead to symbol conflicts
|
||
* don't require large vertex buffers be host-visible
|
||
(usually impossible)
|
||
* correctly detect swapchain image feature flags
|
||
* turned a few 1ms busy loops into infinite waits
|
||
* fix compilation on some platforms that require SPIRV-Tools
|
||
* fix vkCreateEvent error spam on MoltenVK
|
||
* bump queued command limit from 64 to 1024
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Feb 26 01:20:30 UTC 2019 - Martin Herkt <9+suse@cirno.systems>
|
||
|
||
- Build with (preferred) shaderc now that it’s packaged in TW
|
||
- Update to version 1.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.
|
||
|
||
-------------------------------------------------------------------
|
||
Sun Dec 16 14:50:22 UTC 2018 - Martin Herkt <9+suse@cirno.systems>
|
||
|
||
- Remove baselibs.conf since nothing needs it
|
||
- Fix build due to missing shaderc, which is optional
|
||
- Switch to new upstream URL
|
||
- Update to version 1.7.0
|
||
This release marks the first major release of libplacebo, in tune
|
||
with the release of VLC 4, which will be the first major project
|
||
using it. Apart from API stability going forwards, this release
|
||
brings with it a new AV1 film grain shader, better
|
||
interoperability between libplacebo and external APIs like CUDA
|
||
(via shared buffers and shared textures), and ICtCp support.
|
||
|
||
While not strictly part of libplacebo, one of the highlights
|
||
since the previous release includes the existence of a new
|
||
example file demos/video-filtering.c which illustrates how one
|
||
would use libplacebo to do GPU-based image filtering in something
|
||
like FFmpeg or mpv.
|
||
|
||
Additions:
|
||
|
||
* Add a new function pl_gpu_finish which blocks until all
|
||
oustanding rendering on this pl_gpu is finished.
|
||
* Add new functions pl_tex_recreate and pl_buf_recreate, which
|
||
work like pl_tex/buf_create but take a pointer to an existing
|
||
tex/buf that will get destroyed + recreated only when necessary
|
||
* Add a new function pl_shader_is_failed which will return true
|
||
if a given shader is in a "failed" state. Shaders will be
|
||
marked as failed on any internal/usage error, rather than them
|
||
being silently ignored.
|
||
* Add a new enum pl_channel to clarify and encode friendly names
|
||
for the often-referenced "canonical channel order".
|
||
* Add a new header libplacebo/shaders/av1.h which currently
|
||
contains a function pl_shader_av1_grain for applying AV1 film
|
||
grain on the GPU.
|
||
* Add a new concept of an "exportable" object (buffers and
|
||
textures). Exportable objects can be exported using a handle
|
||
and imported into other foreign APIs such as CUDA.
|
||
The new functions pl_buf_export and pl_tex_export must be used
|
||
to correctly synchronize access to the object. This also adds
|
||
new fields uuid and handle_caps to pl_gpu.
|
||
* Supporting the previous feature, add a new field memory_type
|
||
to pl_buf_params which can be used to influence what type of
|
||
memory to allocate a buffer from. Currently only works for
|
||
texture transfer buffers, since allocating uniform/storage
|
||
buffers from non-VRAM makes little sense.
|
||
* Add a new synchronization primitive wrapper, pl_sync, which
|
||
wraps a semaphore pair and must be used to synchronize access
|
||
to textures with external, asynchronous APIs.
|
||
* Implement the ITU-R BT.2100 ICtCp color system. Since the
|
||
libplacebo color systems are not strictly tied to any
|
||
particular transfer function, we must explicitly mark which
|
||
flavor of ICtCp is meant.
|
||
* Add a new field instance_params which can be used to influence
|
||
the parameters used when pl_vulkan_create ends up creating an
|
||
internal instance.
|
||
* Add a new function pl_vulkan_unwrap which allows users to
|
||
unwrap a vulkan-baed pl_tex to expose the internal VkImage,
|
||
allowing simultaneous use (via pl_vulkan_hold/release) similar
|
||
to wrapped external images.
|
||
* Add new generic helper functions pl_std430_layout and
|
||
pl_std140_layout which replace the old pl_buf_uniform_layout,
|
||
pl_buf_storage_layout and pl_push_constant_layout.
|
||
|
||
Changes:
|
||
|
||
* Empty device names ("") can now be passed to pl_vulkan_create.
|
||
They will be treated as if NULL was passed.
|
||
* The out_plane parameter of pl_upload_plane is now optional.
|
||
* Clarify/Relax the restrictions on pl_buf usage and polling.
|
||
Users are technically free to use pl_buf for multiple
|
||
simultaneous libplacebo operations. Buffer polling is only
|
||
needed for accesses by the host.
|
||
* pl_vulkan_hold now returns a bool indicating success.
|
||
* pl_buffer_var has been moved from gpu.h's pl_desc to
|
||
shaders.h's pl_shader_desc. Describing the individual variables
|
||
of a descriptor binding had zero practical application.
|
||
* pl_buf_uniform_layout, pl_buf_storage_layout and
|
||
pl_push_constant_layout are now macros for pl_std140_layout
|
||
and pl_std430_layout (respectively).
|
||
This changed the signature to drop the pl_gpu parameter.
|
||
* The buf_offset parameter to pl_tex_transfer no longer needs to
|
||
be strictly aligned to a multiple of 4. The minimum alignment
|
||
is now 1, however users are strongly recommended to stick to
|
||
the multiple-of-4 alignment (or ideally align_tex_xfer_offset)
|
||
for performance reasons.
|
||
* The chromatic adaptation method in pl_get_color_mapping_matrix
|
||
has been adjusted. We now use an LMS model derived from
|
||
CIECAM97's revised linear Bradford matrix, rather than the
|
||
non-linear matrix that was being used previously (incorrectly
|
||
so, due to the lack of the required nonlinearity).
|
||
* The order of fields in pl_rect3d has been changed for
|
||
consistency with the other rect types.
|
||
|
||
Fixes and performance improvements:
|
||
|
||
* Fix std140/std430 packing errors for vec3.
|
||
* Skip unnecessary flush in pl_buf_poll noop cases.
|
||
* Fix variable collision in sh_prng.
|
||
* Don't leak glslang internal symbols on supported platforms.
|
||
* Fix an issue where pl_pass_run was stricter than intended about
|
||
compatibility with between target and target_dummy.
|
||
* Fix an issue where pl_dispatch could sometimes try dispatching
|
||
shaders with an incompatible target.
|
||
* Fix an error in the heuristic for choosing the optimal image
|
||
layout for vulkan render passes.
|
||
* Improved debugging messages in several places.
|
||
* Slightly speed up lookups from texture LUTs.
|
||
* Fix the addressing of shader LUTs in some hypothetical cases.
|
||
* Correctly flush the contents of host-readable buffers after
|
||
modifications made by the GPU.
|
||
* Fix synchronization on pl_buf_write with non-mapped buffers.
|
||
* Fix undefined behavior when using push descriptors.
|
||
* Slightly speed up some texture recreate operations by
|
||
invalidating re-used textures.
|
||
* Fix an issue when trying to update large (>64k) VRAM-resident
|
||
buffers.
|
||
* Fix two address calculation bugs in pl_tex_blit.
|
||
* Fix an over-read bug when the size of the vertex data changed
|
||
for otherwise identical passes.
|
||
* Fix a misalignment that could theoretically happen with some
|
||
combinations of (odd) texel sizes and device alignment
|
||
requirements.
|
||
* Fix UB when creating "useless" images (without any usage flags)
|
||
* Fix a vulkan device memory leak when destroying large textures.
|
||
* Fix an alignment issue that could happen sometimes with
|
||
pl_buf_write for odd write sizes.
|
||
* Fix an alignment bug when uploading partial textures when async
|
||
transfer is enabled on some devices.
|
||
* Fix crash in pl_color_primaries_is_wide_gamut on DISPLAY_P3.
|
||
* Fix an error when re-using shader objects between polar and
|
||
non-polar samplers. This is now safe to do.
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Sep 28 11:18:38 UTC 2018 - Martin Herkt <9+suse@cirno.systems>
|
||
|
||
- Add C/C++ compilers, glslang and lcms2 to BuildRequires
|
||
- Update to version 0.6.0
|
||
This release brings with it a number of minor fixes and changes,
|
||
as well as a new feature for simulating, and partially
|
||
counteracting, various forms of color blindness. For more
|
||
information see the new pl_cone_params structure and
|
||
pl_get_cone_matrix function.
|
||
|
||
Additions:
|
||
* VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR is now supported, and gets
|
||
treated as PL_ALPHA_UNKNOWN.
|
||
* Add a new feature for simulating various forms of color
|
||
blindness (based on the LMS color model).
|
||
|
||
Changes:
|
||
* Setting pl_render_params.upscaler/downscaler to NULL no longer
|
||
allows automatically choosing bicubic, since this breaks
|
||
various other optimizations that are only possible when using
|
||
the built-in GPU sampling. This now only chooses
|
||
bilinear/nearest depending on the texture/hardware capabilities
|
||
* The public API of pl_shader_alloc was changed:
|
||
the uint8_t ident field was removed. This makes no real sense
|
||
to expose publicly, since users had no legitimate use for it
|
||
other than setting it to 0.
|
||
|
||
Fixes and performance improvements:
|
||
* The pl_dither_params.lut_size now gets correctly defaulted to 6
|
||
* Fixed some use-after-scope bugs in the renderer
|
||
* Fixed colorspace selection when using user-specified swapchain
|
||
formats
|
||
* Peak detection is now correctly disabled if the buffer size is
|
||
set to 0. (Before, it would default back to 63 in that case)
|
||
* Fix the out-of-gamut warning feature. This previously stopped
|
||
working for out-of-range tone mapped values.
|
||
|
||
|
||
-------------------------------------------------------------------
|
||
Sun Jul 29 11:30:28 UTC 2018 - jengelh@inai.de
|
||
|
||
- Fix RPM groups.
|
||
|
||
-------------------------------------------------------------------
|
||
Sat Jun 9 15:43:18 UTC 2018 - 9+suse@cirno.systems
|
||
|
||
- Update to 0.5.0
|
||
This release brings with it greatly improved support for HDR (including
|
||
HDR-in-SDR emulation, native HDR passthrough and improvements to the
|
||
HDR->SDR tone mapping algorithm), as well as support for ICC profiles
|
||
and external VkImage interop (needed for e.g. hardware decoding).
|
||
|
||
Additions:
|
||
* Add support for treating an SDR curve as an HDR curve by
|
||
overriding/providing the true target peak. This essentially allows you
|
||
to calibrate a true HDR device to a typical SDR curve and use it to
|
||
display HDR media, at the cost of bit precision
|
||
* Add more values to enum pl_chroma_location
|
||
* Add a scale factor to struct pl_sample_src, which is useful for e.g.
|
||
debanding on bit-shifted inputs
|
||
* Add a new function to infer/guess unknown pl_color_space fields
|
||
* Add support for 3DLUTs / ICC profiles (via LittleCMS), including
|
||
support for assigning ICC profiles to the `pl_render_image` and
|
||
`pl_render_target` structs
|
||
* Allow enabling optional extra vulkan device/instance extensions, as
|
||
well as listing what extensions were actually loaded
|
||
* Add an API for VkImage interop with user code, e.g. to wrap mapped
|
||
hardware decoding planes into `pl_tex`, plus all synchronization code
|
||
and extra metadata necessary to make this interop safe
|
||
* Implement support for native HDR output on supported platforms
|
||
|
||
Changes:
|
||
* Separate the texture from the plane data struct in `pl_upload_plane`
|
||
* Swapchain FBOs are now guaranteed to be blittable (e.g. pl_tex_clear)
|
||
* Tone mapping is no longer done for desaturation steps. Users wanting
|
||
high quality desaturation should use ICC profiles
|
||
* Change the types of various fields in struct pl_gpu_limits
|
||
* Slightly relax the sizing requirements of pl_tex_transfer
|
||
* Change the default value for pl_tex_transfer_params.stride_w/h.
|
||
Instead of defaulting to the image size, they now default to the rect to
|
||
be transferred
|
||
* Texture transfer buffer offsets must (now) be aligned to the texel
|
||
size, in addition to being a multiple of 4
|
||
* Change the API of `pl_color_space_equal` to be consistent with the
|
||
rest of the colorspace APIs
|
||
* Allow the `pl_upload_plane` helpers to upload from buffers as well
|
||
* Switch the type of mapped buffer pointers from char* to uint8_t*
|
||
* Rename DCI_P3 to Display_P3, and add DCI_P3 (using the actual DCI white
|
||
point)
|
||
|
||
Fixes and performance improvements:
|
||
* Fix some compatibility issues with GLSL 120
|
||
* Prevent desaturation from exploding when tone mapping to HDR, or when
|
||
tone mapping a very bright HDR scene to SDR
|
||
* Implement the fully parametrized BT.2100 (HLG) OOTF in both
|
||
directions, based on the tagged/inferred signal peak
|
||
* Fix an issue preventing the out-of-gamut feature from working
|
||
correctly on HDR displays
|
||
* Fix a segfault that occurs when instance creation fails
|
||
* Fix an issue where `peak_detect_frames` was sometimes too low
|
||
* Allow debanding to take care of implicit bilinear sampling in cases
|
||
where no other scaler is requested, thus avoiding an unnecessary FBO
|
||
indirection
|
||
* Only run the debanding algorithm on the parts of the image we will
|
||
actually be displaying. This is relevant when cropping
|
||
* Fix an issue where PL_TONE_MAPPINg_MOBIUS could fail in certain
|
||
(unrealistic) scenarios involving HDR-in-SDR emulation
|
||
* Fix an issue where vulkan could sometimes modify commands after
|
||
submitting them, when recreating vertex buffers
|
||
* Make an effort to reuse the same vertex buffer when the contents don't
|
||
change from the previous invocation
|
||
* Fix the glslang locale work-arounds on windows
|
||
* Fix an issue where trying to upload from a too-large texel buffer
|
||
results in an assertion failure rather than a clean error
|
||
* Fix an issue where the usage of VkEvents prevented libplacebo from
|
||
working on platforms where they were unsupported (e.g. MoltenVK)
|
||
* Support and use vulkan push descriptors where supported. This avoids
|
||
having to maintain, update and synchronize descriptor sets
|
||
* Correctly disable signal linearization on low-bit depth FBOs
|
||
* Prevent a crash on the (pathological) case of a shader with no
|
||
descriptors
|
||
* Fix a bug in the size limit calculations for 2D/3D LUTs
|
||
* Use optimization level "performance" instead of "size" for shader
|
||
compilation
|
||
* Fix an abort() when trying to render to a non-storable FBO when using
|
||
a final pass that requires compute shaders (e.g. HDR peak detection)
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Jun 1 19:22:50 UTC 2018 - 9+suse@cirno.systems
|
||
|
||
- Init, 0.4.0
|