[Mesa-dev] [PATCH 00/15] Implement latest version of EXT_shader_framebuffer_fetch.

Francisco Jerez currojerez at riseup.net
Wed Feb 14 21:18:22 UTC 2018

This series implements version 7 of the EXT_shader_framebuffer_fetch
specification, which includes a number of changes I had originally
planned for a MESA extension but which ended up queued for inclusion
into an EXT extension after months-long discussion with several
Khronos members.  The most important changes are desktop GL support
(the original EXT extension only targeted GLES) and a non-coherent
extension with more relaxed memory ordering guarantees that allows
wider hardware support and/or better performance than the coherent
extension.  The GLSL front-end has been relying on non-coherent
framebuffer fetch functionality internally for a while in order to
implement KHR_blend_equation_advanced, so most of the back-end code is
already there, but it wasn't exposed directly to the user until now.

The updated EXT_shader_framebuffer_fetch extension hasn't made it into
the public Khronos registry page yet but it's been merged into
Khronos' private repository of the registry already [1].

Patch 1 of the series fixes a regression in the i965 driver that broke
KHR_blend_equation_advanced with some render targets.  This wasn't
caught earlier because of test coverage gaps of the
KHR_blend_equation_advanced extension.  The problem would have led to
failures in some tests I've written for the
EXT_shader_framebuffer_fetch_non_coherent extension I'm about to send
to the Piglit mailing list shortly.  Patches 2-3 and 9 are cleaning up
remnants of the MESA framebuffer fetch extension that was being used
internally in order to implement KHR_blend_equation_advanced.  Patches
6-8 are required to make room for additional qualifier flags in the
ast_type_qualifier object, which has run out of bits in the uint64_t
mask preventing the definition of additional type qualifiers (IIRC
this was the main reason the ARB_fragment_shader_interlock series was
shot down last year?).  The remaining patches are implementing
features of the updated extension that weren't already implemented for
the MESA extension.

[1] https://gitlab.khronos.org/opengl/registry/blob/master/extensions/EXT/EXT_shader_framebuffer_fetch.txt

[PATCH 01/15] i965: Fix KHR_blend_equation_advanced with some render targets.
[PATCH 02/15] mesa: Rename dd_function_table::BlendBarrier to match latest EXT spec.
[PATCH 03/15] mesa: Rename MESA_shader_framebuffer_fetch gl_extensions bits to EXT.
[PATCH 04/15] glapi: Update XML for last revision of EXT_shader_framebuffer_fetch.
[PATCH 05/15] mesa: Implement glFramebufferFetchBarrierEXT entry point.
[PATCH 06/15] util: Add EXPLICIT_CONVERSION macro.
[PATCH 07/15] util/bitset: Add C++ wrapper for static-size bitsets.
[PATCH 08/15] glsl: Switch ast_type_qualifier to a 128-bit bitset.
[PATCH 09/15] glsl: Replace MESA_shader_framebuffer_fetch extension flags with EXT ones.
[PATCH 10/15] glsl: Initialize ir_variable_data::fb_fetch_output earlier for GL(ES) 2.
[PATCH 11/15] glsl: Allow layout token for EXT_shader_framebuffer_fetch_non_coherent.
[PATCH 12/15] glsl: Add support for the framebuffer fetch layout(noncoherent) qualifier.
[PATCH 13/15] glsl: Specify framebuffer fetch coherency mode in lower_blend_equation_advanced().
[PATCH 14/15] glsl: Silence warnings when reading from a framebuffer fetch output.
[PATCH 15/15] mesa: Expose EXT_shader_framebuffer_fetch(_non_coherent) on desktop and embedded GL.

More information about the mesa-dev mailing list