Michel Dänzer <mic...@daenzer.net> writes: > 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.st...@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?
From OES_EGL_image.txt: If the GL is unable to specify a texture object using the supplied eglImageOES <image> (if, for example, <image> refers to a multisampled eglImageOES), the error INVALID_OPERATION is generated. ... If the GL is unable to create a renderbuffer using the specified eglImageOES, the error INVALID_OPERATION is generated. If <image> does not refer to a valid eglImageOES object, the error INVALID_VALUE is generated. and st_cb_eglimage.c is checking the screen for sampler / rendertarget support for the images that it looks up.
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev