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:
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
PIPE_CAP_DMABUF,
PIPE_CAP_PREFER_COMPUTE_BLIT_FOR_MULTIMEDIA,
PIPE_CAP_FRAGMENT_SHADER_INTERLOCK,
+ PIPE_CAP_FBFETCH_COHERENT,
};
/**
}
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;
}
}