st/dri: support format modifier queries
ask the driver for supported modifiers for a given format. v2: move to __DRIimageExtension v16. v3: fail if the supplied format is not supported by driver. v4: purge PIPE_CAP_QUERY_DMABUF_ATTRIBS. v5: - move to __DRIimageExtension v15, pass external_only to the driver. Signed-off-by: Varad Gautam <varad.gautam@collabora.com> Reviewed-by: Lucas Stach <l.stach@pengutronix.de> (v4) Cc: Lucas Stach <l.stach@pengutronix.de>
This commit is contained in:
committed by
Emil Velikov
parent
e0965a2c8e
commit
f84bb6a9d9
@@ -1437,6 +1437,25 @@ dri2_query_dma_buf_formats(__DRIscreen *_screen, int max, int *formats,
|
||||
return true;
|
||||
}
|
||||
|
||||
static boolean
|
||||
dri2_query_dma_buf_modifiers(__DRIscreen *_screen, int fourcc, int max,
|
||||
uint64_t *modifiers, unsigned int *external_only,
|
||||
int *count)
|
||||
{
|
||||
struct dri_screen *screen = dri_screen(_screen);
|
||||
struct pipe_screen *pscreen = screen->base.screen;
|
||||
enum pipe_format format = fourcc_to_pipe_format(fourcc);
|
||||
const unsigned usage = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
|
||||
|
||||
if (pscreen->query_dmabuf_modifiers != NULL &&
|
||||
pscreen->is_format_supported(pscreen, format, screen->target, 0, usage)) {
|
||||
pscreen->query_dmabuf_modifiers(pscreen, format, max, modifiers,
|
||||
external_only, count);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static __DRIimage *
|
||||
dri2_from_dma_bufs(__DRIscreen *screen,
|
||||
int width, int height, int fourcc,
|
||||
@@ -1603,7 +1622,7 @@ dri2_get_capabilities(__DRIscreen *_screen)
|
||||
|
||||
/* The extension is modified during runtime if DRI_PRIME is detected */
|
||||
static __DRIimageExtension dri2ImageExtension = {
|
||||
.base = { __DRI_IMAGE, 14 },
|
||||
.base = { __DRI_IMAGE, 15 },
|
||||
|
||||
.createImageFromName = dri2_create_image_from_name,
|
||||
.createImageFromRenderbuffer = dri2_create_image_from_renderbuffer,
|
||||
@@ -2033,6 +2052,8 @@ dri2_init_screen(__DRIscreen * sPriv)
|
||||
dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
|
||||
dri2ImageExtension.createImageFromDmaBufs2 = dri2_from_dma_bufs2;
|
||||
dri2ImageExtension.queryDmaBufFormats = dri2_query_dma_buf_formats;
|
||||
dri2ImageExtension.queryDmaBufModifiers =
|
||||
dri2_query_dma_buf_modifiers;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2111,6 +2132,7 @@ dri_kms_init_screen(__DRIscreen * sPriv)
|
||||
dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
|
||||
dri2ImageExtension.createImageFromDmaBufs2 = dri2_from_dma_bufs2;
|
||||
dri2ImageExtension.queryDmaBufFormats = dri2_query_dma_buf_formats;
|
||||
dri2ImageExtension.queryDmaBufModifiers = dri2_query_dma_buf_modifiers;
|
||||
}
|
||||
|
||||
sPriv->extensions = dri_screen_extensions;
|
||||
|
||||
Reference in New Issue
Block a user