gallium/dri: Make YUV formats we're going to emulate external-only.

If we're going to have to bind them as separate planes with colorspace
conversion for sampling on the frontend, then we need to report that
they're only for external-image samplers, otherwise the lowering won't be
applied.

Fixes: 4e3a7dcf ("gallium: enable EGL_EXT_image_dma_buf_import_modifiers unconditionally")
Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13038>
(cherry picked from commit c530510514)
This commit is contained in:
Emma Anholt 2021-09-24 10:04:49 -07:00 committed by Dylan Baker
parent b40c0f1bc2
commit 7f8c5eae38
2 changed files with 15 additions and 7 deletions

View file

@ -742,7 +742,7 @@
"description": "gallium/dri: Make YUV formats we're going to emulate external-only.",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "4e3a7dcf6ee4946c46ae8b35e7883a49859ef6fb"
},

View file

@ -1536,16 +1536,24 @@ dri2_query_dma_buf_modifiers(__DRIscreen *_screen, int fourcc, int max,
format = map->pipe_format;
bool native_sampling = pscreen->is_format_supported(pscreen, format, screen->target, 0, 0,
PIPE_BIND_SAMPLER_VIEW);
if (pscreen->is_format_supported(pscreen, format, screen->target, 0, 0,
PIPE_BIND_RENDER_TARGET) ||
pscreen->is_format_supported(pscreen, format, screen->target, 0, 0,
PIPE_BIND_SAMPLER_VIEW) ||
dri2_yuv_dma_buf_supported(screen, map)) {
if (pscreen->query_dmabuf_modifiers != NULL)
PIPE_BIND_RENDER_TARGET) ||
native_sampling ||
dri2_yuv_dma_buf_supported(screen, map)) {
if (pscreen->query_dmabuf_modifiers != NULL) {
pscreen->query_dmabuf_modifiers(pscreen, format, max, modifiers,
external_only, count);
else
if (!native_sampling && external_only) {
/* To support it using YUV lowering, we need it to be samplerExternalOES.
*/
for (int i = 0; i < *count; i++)
external_only[i] = true;
}
} else {
*count = 0;
}
return true;
}
return false;