From cca8af0c7d56890d070f7fd60acc169f641e0051 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 24 Apr 2019 13:17:54 -0700 Subject: [PATCH] gallium: Add PIPE_CAP_FBFETCH_COHERENT and expose extensions MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit st/mesa now exposes KHR_blend_equation_advanced_coherent and EXT_shader_framebuffer_fetch if the new capability is supported. Reviewed-by: Marek Olšák --- src/gallium/auxiliary/util/u_screen.c | 1 + src/gallium/docs/source/screen.rst | 2 ++ src/gallium/include/pipe/p_defines.h | 1 + src/mesa/state_tracker/st_extensions.c | 4 ++++ 4 files changed, 8 insertions(+) diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c index 05ac9be..6457bcf 100644 --- a/src/gallium/auxiliary/util/u_screen.c +++ b/src/gallium/auxiliary/util/u_screen.c @@ -271,6 +271,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen, return 0; case PIPE_CAP_FBFETCH: + case PIPE_CAP_FBFETCH_COHERENT: case PIPE_CAP_TGSI_MUL_ZERO_WINS: case PIPE_CAP_DOUBLES: case PIPE_CAP_INT64: diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst index 054939f..7081041 100644 --- a/src/gallium/docs/source/screen.rst +++ b/src/gallium/docs/source/screen.rst @@ -382,6 +382,8 @@ The integer capabilities: current framebuffer can be read in the shader. 0 means framebuffer fetch is not supported. 1 means that only the first render target can be read, and a larger value would mean that multiple render targets are supported. +* ``PIPE_CAP_FBFETCH_COHERENT``: Whether framebuffer fetches from the fragment + shader can be guaranteed to be coherent with framebuffer writes. * ``PIPE_CAP_TGSI_MUL_ZERO_WINS``: Whether TGSI shaders support the ``TGSI_PROPERTY_MUL_ZERO_WINS`` shader property. * ``PIPE_CAP_DOUBLES``: Whether double precision floating-point operations diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index 6232547..d3c9512 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -884,6 +884,7 @@ enum pipe_cap PIPE_CAP_DMABUF, PIPE_CAP_PREFER_COMPUTE_BLIT_FOR_MULTIMEDIA, PIPE_CAP_FRAGMENT_SHADER_INTERLOCK, + PIPE_CAP_FBFETCH_COHERENT, }; /** diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index f442c08..3d5b0fa 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -1395,13 +1395,17 @@ void st_init_extensions(struct pipe_screen *screen, } unsigned max_fb_fetch_rts = screen->get_param(screen, PIPE_CAP_FBFETCH); + bool coherent_fb_fetch = + screen->get_param(screen, PIPE_CAP_FBFETCH_COHERENT); if (max_fb_fetch_rts > 0) { extensions->KHR_blend_equation_advanced = true; + extensions->KHR_blend_equation_advanced_coherent = coherent_fb_fetch; if (max_fb_fetch_rts >= screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS)) { extensions->EXT_shader_framebuffer_fetch_non_coherent = true; + extensions->EXT_shader_framebuffer_fetch = coherent_fb_fetch; } } -- 2.7.4