Skip to content

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.

- 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

- load all vulkan function pointers indirectly, using a user-provided
  `vkGetInstanceProcAddr` function
- vulkan can now be built without linking against
- 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