[Mesa-dev] [PATCH] mesa: fix tex format selection for GL_R32F and other R/G float formats
Jose Fonseca
jfonseca at vmware.com
Mon Jan 16 10:01:10 PST 2012
Looks good Brian.
Maybe MESA_FORMAT_RGBA_FLOAT16 should probably be before MESA_FORMAT_RG_FLOAT32 for GL_R16F/GL_RG16F -- same memory footprint, but exact rounding -- but I doubt it matters much either way.
Jose
----- Original Message -----
> 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 branch.
> ---
> 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:
> --
> 1.7.3.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list