[Mesa-dev] [PATCH 1/6] st/dri: allow to create image for formats that only support SV or RT binding
Michel Dänzer
michel at daenzer.net
Mon Apr 15 10:04:24 UTC 2019
On 2019-04-12 7:33 p.m., Lucas Stach wrote:
> Unconditionally requesting both bindings can lead to premature
> failure to create a valid image.
>
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> ---
> src/gallium/state_trackers/dri/dri2.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
> index efb43c0d7973..510b7f8d04a7 100644
> --- a/src/gallium/state_trackers/dri/dri2.c
> +++ b/src/gallium/state_trackers/dri/dri2.c
> @@ -987,14 +987,23 @@ dri2_create_image_common(__DRIscreen *_screen,
> {
> const struct dri2_format_mapping *map = dri2_get_mapping_by_format(format);
> struct dri_screen *screen = dri_screen(_screen);
> + struct pipe_screen *pscreen = screen->base.screen;
> __DRIimage *img;
> struct pipe_resource templ;
> - unsigned tex_usage;
> + unsigned tex_usage = 0;
>
> if (!map)
> return NULL;
>
> - tex_usage = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
> + if (pscreen->is_format_supported(pscreen, map->pipe_format, screen->target,
> + 0, 0, PIPE_BIND_RENDER_TARGET))
> + tex_usage |= PIPE_BIND_RENDER_TARGET;
> + if (pscreen->is_format_supported(pscreen, map->pipe_format, screen->target,
> + 0, 0, PIPE_BIND_SAMPLER_VIEW))
> + tex_usage |= PIPE_BIND_SAMPLER_VIEW;
> +
> + if (!tex_usage)
> + return NULL;
>
> if (use & __DRI_IMAGE_USE_SCANOUT)
> tex_usage |= PIPE_BIND_SCANOUT;
>
Since there are no __DRI_IMAGE_USE_* flags for rendering & sampling, the
expectation does seem to be that both are supported. What happens if an
image is created for a format which only supports sampling, then the
caller attempts rendering to it?
--
Earthling Michel Dänzer | https://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the mesa-dev
mailing list