Mesa (master): mesa: fix tex format selection for GL_R32F and other R/ G float formats

Brian Paul brianp at kemper.freedesktop.org
Wed Jan 18 17:45:35 UTC 2012


Module: Mesa
Branch: master
Commit: 7628696004515074594d4fdac4e422c81c86b32c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7628696004515074594d4fdac4e422c81c86b32c

Author: Brian Paul <brianp at vmware.com>
Date:   Mon Jan 16 09:05:05 2012 -0700

mesa: fix tex format selection for GL_R32F and other R/G float formats

The i965 driver advertises GL_ARB_texture_float and GL_ARB_texture_rg
support but the ctx->TextureFormatSupported[] table entries for
MESA_FORMAT_R_FLOAT32 and MESA_FORMAT_RGBA_FLOAT32 are false on gen 4
hardware.  So the case for GL_R32F would fail and we'd print an
implementation error.

This patch adds more Mesa tex format options for GL_R32F and other R/G
formats so we fall back to 16-bit formats when 32-bit formats aren't
available.

Eric made the same fix in commit 6216a5b4 for the non R/G formats.

v2: try 16-bit formats before 32-bit formats and try RG formats before
RGBA where possible.

This should fix https://bugs.freedesktop.org/show_bug.cgi?id=44039

NOTE: This is a candidate for the 8.0 and 7.11 branches.

Reviewed-by: José Fonseca <jfonseca at vmware.com>
Reviewed-by: Roland Scheidegger <sroland at vmware.com>

---

 src/mesa/main/texformat.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
index 7e60541..d393873 100644
--- a/src/mesa/main/texformat.c
+++ b/src/mesa/main/texformat.c
@@ -786,21 +786,31 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       switch (internalFormat) {
       case GL_R16F:
 	 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
+	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
 	 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
+	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
+	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
 	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
 	 break;
       case GL_R32F:
 	 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
+	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
 	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+	 RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
+	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
+	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
 	 break;
       case GL_RG16F:
 	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
 	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
+	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
 	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
 	 break;
       case GL_RG32F:
 	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
 	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+	 RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
+	 RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
 	 break;
 
       default:




More information about the mesa-commit mailing list