[Mesa-dev] [PATCH 1/6] st/dri: allow to create image for formats that only support SV or RT binding

Eric Anholt eric at anholt.net
Fri Apr 19 18:17:19 UTC 2019


Michel Dänzer <michel at daenzer.net> writes:

> On 2019-04-15 12:57 p.m., Lucas Stach wrote:
>> Am Montag, den 15.04.2019, 12:04 +0200 schrieb Michel Dänzer:
>>> 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?
>> 
>> While I agree that the missing flags is a problem, I don't think the
>> expectation that createImage must create something which is both render
>> and sampler compatible holds anymore.
>
> I don't mean "expectation" as in that of any particular application. I
> mean that because the caller cannot yet express that it only wants to
> sample from / render to the image, dri2_create_image_common must assume
> that the image will be used for both.

If it can be used for both, this patch does.  If the format would be
unsupported unless one of the flags is dropped, then it drops that
flag.  This seems right to me.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190419/0b998c29/attachment.sig>


More information about the mesa-dev mailing list