Mesa (master): gallium: Add PIPE_CAP_FBFETCH_COHERENT and expose extensions
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu May 23 15:15:58 UTC 2019
Module: Mesa
Branch: master
Commit: cca8af0c7d56890d070f7fd60acc169f641e0051
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cca8af0c7d56890d070f7fd60acc169f641e0051
Author: Kenneth Graunke <kenneth at whitecape.org>
Date: Wed Apr 24 13:17:54 2019 -0700
gallium: Add PIPE_CAP_FBFETCH_COHERENT and expose extensions
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 <marek.olsak at amd.com>
---
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 05ac9be9451..6457bcffda1 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 054939f6887..70810418f8a 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 6232547850f..d3c951279d9 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 f442c08293b..3d5b0fa5836 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;
}
}
More information about the mesa-commit
mailing list