mesa: require render target bind for A/L/I in format selection

these are required framebuffer formats in certain versions of GL,
so don't create a texture that can't later be bound to a framebuffer

see also spec@!opengl 3.0@required-texture-attachment-formats

cc: mesa-stable

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17687>
(cherry picked from commit 28d033b34f)
This commit is contained in:
Mike Blumenkrantz 2022-08-02 09:24:35 -04:00 committed by Dylan Baker
parent b3fc8cb419
commit 9a43a1f1d1
2 changed files with 17 additions and 1 deletions

View file

@ -229,7 +229,7 @@
"description": "mesa: require render target bind for A/L/I in format selection",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null
},

View file

@ -1294,6 +1294,22 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum target,
internalFormat == GL_R8UI)
bindings |= PIPE_BIND_RENDER_TARGET;
if ((_mesa_is_desktop_gl(ctx) && ctx->Version >= 30) &&
(internalFormat == GL_ALPHA4 ||
internalFormat == GL_ALPHA8 ||
internalFormat == GL_ALPHA12 ||
internalFormat == GL_ALPHA16 ||
/* ARB_texture_float */
internalFormat == GL_ALPHA32F_ARB ||
internalFormat == GL_INTENSITY32F_ARB ||
internalFormat == GL_LUMINANCE32F_ARB ||
internalFormat == GL_LUMINANCE_ALPHA32F_ARB ||
internalFormat == GL_ALPHA16F_ARB ||
internalFormat == GL_INTENSITY16F_ARB ||
internalFormat == GL_LUMINANCE16F_ARB ||
internalFormat == GL_LUMINANCE_ALPHA16F_ARB))
bindings |= PIPE_BIND_RENDER_TARGET;
/* GLES allows the driver to choose any format which matches
* the format+type combo, because GLES only supports unsized internal
* formats and expects the driver to choose whatever suits it.