From 28d033b34fe3c52f4720235449a0a1fd5fe683b0 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 2 Aug 2022 09:24:35 -0400 Subject: [PATCH] mesa: require render target bind for A/L/I in format selection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Part-of: --- src/mesa/state_tracker/st_format.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index 978d7fbe23d..f951c81cf95 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -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.