mesa: Fall back to float16 if float32 isn't supported in ChooseTexFormat.
authorEric Anholt <eric@anholt.net>
Tue, 22 Nov 2011 21:27:54 +0000 (13:27 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 22 Nov 2011 21:58:38 +0000 (13:58 -0800)
Until GL 3.0, there isn't any requirement on the actual sizes of
channels chosen.  By falling back to 16 here, we can correctly support
ARB_texture_float on original i965 hardware, which can't correctly
filter 32-bit floats.

src/mesa/main/texformat.c

index 38571b8..ee9552b 100644 (file)
@@ -326,6 +326,8 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          case GL_ALPHA32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
            break;
          case GL_LUMINANCE16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
@@ -335,6 +337,8 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          case GL_LUMINANCE32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
            break;
          case GL_LUMINANCE_ALPHA16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
@@ -344,6 +348,8 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          case GL_LUMINANCE_ALPHA32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
            break;
          case GL_INTENSITY16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
@@ -353,6 +359,8 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          case GL_INTENSITY32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
            break;
          case GL_RGB16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
@@ -363,6 +371,8 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          case GL_RGB32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
            break;
          case GL_RGBA16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
@@ -370,6 +380,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
            break;
          case GL_RGBA32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
            break;
          default:
             ; /* fallthrough */