kopper: add a dmabuf-free image interface for use with sw drivers

sw drivers don't support modifiers or dmabufs or any of that, so separate
interfaces are needed to avoid advertising extensions that will only lead
to crashes

Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15802>
This commit is contained in:
Mike Blumenkrantz
2022-04-07 14:28:55 -04:00
committed by Marge Bot
parent 31824d4213
commit d09ee469f0
3 changed files with 39 additions and 2 deletions

View File

@@ -54,6 +54,7 @@ struct kopper_screen {
};
extern const __DRIimageExtension driVkImageExtension;
extern const __DRIimageExtension driVkImageExtensionSw;
static void
kopper_flush_drawable(__DRIdrawable *dPriv)
@@ -95,6 +96,18 @@ static const __DRIextension *drivk_screen_extensions[] = {
NULL
};
static const __DRIextension *drivk_sw_screen_extensions[] = {
&driTexBufferExtension.base,
&dri2RendererQueryExtension.base,
&dri2ConfigQueryExtension.base,
&dri2FenceExtension.base,
&dri2Robustness.base,
&driVkImageExtensionSw.base,
&dri2FlushControlExtension.base,
&driVkFlushExtension.base,
NULL
};
static const __DRIconfig **
kopper_init_screen(__DRIscreen * sPriv)
{
@@ -137,7 +150,10 @@ kopper_init_screen(__DRIscreen * sPriv)
assert(pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY));
screen->has_reset_status_query = true;
screen->lookup_egl_image = dri2_lookup_egl_image;
sPriv->extensions = drivk_screen_extensions;
if (pscreen->get_param(pscreen, PIPE_CAP_DMABUF))
sPriv->extensions = drivk_screen_extensions;
else
sPriv->extensions = drivk_sw_screen_extensions;
const __DRIimageLookupExtension *image = sPriv->dri2.image;
if (image &&