X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Ftexformat.c;h=c7765bcdb2fba10d61fcc0eb0ee1d572cbe426f2;hb=a0d667036d8c8b77fa62f74263583b07909f8637;hp=6d3b80556618b386592c8f2f0e2eb15c23f078b1;hpb=7e78033c11858b34e274be91586fdfa750c1db11;p=mesa.git diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c index 6d3b8055661..c7765bcdb2f 100644 --- a/src/mesa/main/texformat.c +++ b/src/mesa/main/texformat.c @@ -38,6 +38,7 @@ #include "mtypes.h" #include "texcompress.h" #include "texformat.h" +#include "glformats.h" #define RETURN_IF_SUPPORTED(f) do { \ if (ctx->TextureFormatSupported[f]) \ @@ -73,6 +74,8 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_B4G4R4A4_UNORM); } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) { RETURN_IF_SUPPORTED(MESA_FORMAT_B5G5R5A1_UNORM); + } else if (type == GL_UNSIGNED_SHORT_5_5_5_1) { + RETURN_IF_SUPPORTED(MESA_FORMAT_B5G5R5A1_UNORM); } else if (type == GL_UNSIGNED_INT_2_10_10_10_REV) { RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM); } @@ -85,6 +88,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, break; case GL_RGB5_A1: RETURN_IF_SUPPORTED(MESA_FORMAT_B5G5R5A1_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_A1B5G5R5_UNORM); break; case GL_RGBA2: RETURN_IF_SUPPORTED(MESA_FORMAT_A4R4G4B4_UNORM); /* just to test another format*/ @@ -114,6 +118,9 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, if (type == GL_UNSIGNED_INT_2_10_10_10_REV) { RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM); } + if (type == GL_UNSIGNED_SHORT_5_6_5) { + RETURN_IF_SUPPORTED(MESA_FORMAT_B5G6R5_UNORM); + } /* fallthrough */ case GL_RGB8: RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UNORM8); @@ -155,12 +162,14 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case GL_ALPHA4: case GL_ALPHA8: RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UNORM8); break; case GL_ALPHA12: case GL_ALPHA16: RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM16); RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UNORM8); break; /* Luminance formats */ @@ -180,21 +189,21 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, /* Luminance/Alpha formats */ case GL_LUMINANCE4_ALPHA4: RETURN_IF_SUPPORTED(MESA_FORMAT_L4A4_UNORM); - RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UNORM8); break; case 2: case GL_LUMINANCE_ALPHA: case GL_LUMINANCE6_ALPHA2: case GL_LUMINANCE8_ALPHA8: - RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UNORM8); break; case GL_LUMINANCE12_ALPHA4: case GL_LUMINANCE12_ALPHA12: case GL_LUMINANCE16_ALPHA16: - RETURN_IF_SUPPORTED(MESA_FORMAT_L16A16_UNORM); - RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UNORM8); break; case GL_INTENSITY: @@ -224,12 +233,13 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case GL_COMPRESSED_ALPHA_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UNORM8); break; case GL_COMPRESSED_LUMINANCE_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_L_UNORM8); break; case GL_COMPRESSED_LUMINANCE_ALPHA_ARB: - RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UNORM8); break; case GL_COMPRESSED_INTENSITY_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_I_UNORM8); @@ -243,9 +253,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, * 1D ARRAY textures in S3TC format. */ if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) { - if (ctx->Mesa_DXTn) - RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); - RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); } RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_UNORM8); RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8X8_UNORM); @@ -254,9 +262,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case GL_COMPRESSED_RGBA_ARB: /* We don't use texture compression for 1D and 1D array textures. */ if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) { - if (ctx->Mesa_DXTn) - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */ - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */ } RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_UNORM); RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); @@ -273,87 +279,6 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR_REV); break; - /* For non-generic compressed format we assert two things: - * - * 1. The format has already been validated against the set of available - * extensions. - * - * 2. The driver only enables the extension if it supports all of the - * formats that are part of that extension. - */ - case GL_COMPRESSED_RGB_FXT1_3DFX: - return MESA_FORMAT_RGB_FXT1; - case GL_COMPRESSED_RGBA_FXT1_3DFX: - return MESA_FORMAT_RGBA_FXT1; - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: - case GL_RGB_S3TC: - case GL_RGB4_S3TC: - return MESA_FORMAT_RGB_DXT1; - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: - return MESA_FORMAT_RGBA_DXT1; - case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: - case GL_RGBA_S3TC: - case GL_RGBA4_S3TC: - return MESA_FORMAT_RGBA_DXT3; - case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: - return MESA_FORMAT_RGBA_DXT5; - case GL_COMPRESSED_RED_RGTC1: - return MESA_FORMAT_R_RGTC1_UNORM; - case GL_COMPRESSED_SIGNED_RED_RGTC1: - return MESA_FORMAT_R_RGTC1_SNORM; - case GL_COMPRESSED_RG_RGTC2: - return MESA_FORMAT_RG_RGTC2_UNORM; - case GL_COMPRESSED_SIGNED_RG_RGTC2: - return MESA_FORMAT_RG_RGTC2_SNORM; - case GL_COMPRESSED_LUMINANCE_LATC1_EXT: - return MESA_FORMAT_L_LATC1_UNORM; - case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: - return MESA_FORMAT_L_LATC1_SNORM; - case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: - return MESA_FORMAT_LA_LATC2_UNORM; - case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: - return MESA_FORMAT_LA_LATC2_SNORM; - case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: - return MESA_FORMAT_LA_LATC2_UNORM; - case GL_ETC1_RGB8_OES: - return MESA_FORMAT_ETC1_RGB8; - case GL_COMPRESSED_RGB8_ETC2: - return MESA_FORMAT_ETC2_RGB8; - case GL_COMPRESSED_SRGB8_ETC2: - return MESA_FORMAT_ETC2_SRGB8; - case GL_COMPRESSED_RGBA8_ETC2_EAC: - return MESA_FORMAT_ETC2_RGBA8_EAC; - case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: - return MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC; - case GL_COMPRESSED_R11_EAC: - return MESA_FORMAT_ETC2_R11_EAC; - case GL_COMPRESSED_RG11_EAC: - return MESA_FORMAT_ETC2_RG11_EAC; - case GL_COMPRESSED_SIGNED_R11_EAC: - return MESA_FORMAT_ETC2_SIGNED_R11_EAC; - case GL_COMPRESSED_SIGNED_RG11_EAC: - return MESA_FORMAT_ETC2_SIGNED_RG11_EAC; - case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: - return MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1; - case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: - return MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1; - case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: - return MESA_FORMAT_SRGB_DXT1; - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: - return MESA_FORMAT_SRGBA_DXT1; - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: - return MESA_FORMAT_SRGBA_DXT3; - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: - return MESA_FORMAT_SRGBA_DXT5; - case GL_COMPRESSED_RGBA_BPTC_UNORM: - return MESA_FORMAT_BPTC_RGBA_UNORM; - case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM: - return MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM; - case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT: - return MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT; - case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT: - return MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT; - case GL_ALPHA16F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_A_FLOAT16); RETURN_IF_SUPPORTED(MESA_FORMAT_A_FLOAT32); @@ -427,12 +352,12 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case GL_RGB9_E5: /* GL_EXT_texture_shared_exponent -- just one format to support */ - ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R9G9B9E5_FLOAT]); + assert(ctx->TextureFormatSupported[MESA_FORMAT_R9G9B9E5_FLOAT]); return MESA_FORMAT_R9G9B9E5_FLOAT; case GL_R11F_G11F_B10F: /* GL_EXT_texture_packed_float -- just one format to support */ - ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11G11B10_FLOAT]); + assert(ctx->TextureFormatSupported[MESA_FORMAT_R11G11B10_FLOAT]); return MESA_FORMAT_R11G11B10_FLOAT; case GL_DEPTH_STENCIL_EXT: @@ -442,10 +367,10 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, break; case GL_DEPTH_COMPONENT32F: - ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z_FLOAT32]); + assert(ctx->TextureFormatSupported[MESA_FORMAT_Z_FLOAT32]); return MESA_FORMAT_Z_FLOAT32; case GL_DEPTH32F_STENCIL8: - ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_S8X24_UINT]); + assert(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_S8X24_UINT]); return MESA_FORMAT_Z32_FLOAT_S8X24_UINT; case GL_RED_SNORM: @@ -454,7 +379,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, break; case GL_RG_SNORM: case GL_RG8_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_SNORM8); break; case GL_RGB_SNORM: case GL_RGB8_SNORM: @@ -484,7 +409,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, break; case GL_LUMINANCE_ALPHA_SNORM: case GL_LUMINANCE8_ALPHA8_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SNORM8); RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); break; @@ -498,7 +423,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_R_SNORM16); break; case GL_RG16_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_R16G16_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_SNORM16); break; case GL_RGB16_SNORM: RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_SNORM16); @@ -539,6 +464,9 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_SRGB8); RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); + + RETURN_IF_SUPPORTED(MESA_FORMAT_X8B8G8R8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB); break; case GL_SRGB_ALPHA_EXT: case GL_SRGB8_ALPHA8_EXT: @@ -546,36 +474,44 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SRGB); RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB); + break; + case GL_SR8_EXT: + RETURN_IF_SUPPORTED(MESA_FORMAT_R_SRGB8); break; case GL_SLUMINANCE_EXT: case GL_SLUMINANCE8_EXT: RETURN_IF_SUPPORTED(MESA_FORMAT_L_SRGB8); RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB); break; case GL_SLUMINANCE_ALPHA_EXT: case GL_SLUMINANCE8_ALPHA8_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SRGB8); RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB); break; case GL_COMPRESSED_SLUMINANCE_EXT: RETURN_IF_SUPPORTED(MESA_FORMAT_L_SRGB8); RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB); break; case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SRGB8); RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB); break; case GL_COMPRESSED_SRGB_EXT: - if (ctx->Mesa_DXTn) - RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); + RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_SRGB8); RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB); break; case GL_COMPRESSED_SRGB_ALPHA_EXT: - if (ctx->Mesa_DXTn) - RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */ + RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */ RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SRGB); RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB); break; case GL_ALPHA8UI_EXT: @@ -741,17 +677,17 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case GL_RG: case GL_RG8: - RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UNORM8); break; case GL_COMPRESSED_RG: if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2_UNORM); - RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UNORM8); break; case GL_RG16: - RETURN_IF_SUPPORTED(MESA_FORMAT_R16G16_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UNORM16); break; case GL_R16F: @@ -828,23 +764,26 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case GL_BGRA: RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); break; - } - _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()", - _mesa_lookup_enum_by_nr(internalFormat)); - return MESA_FORMAT_NONE; -} + case GL_STENCIL_INDEX: + case GL_STENCIL_INDEX8: + RETURN_IF_SUPPORTED(MESA_FORMAT_S_UINT8); + break; -GLboolean -_mesa_tex_target_is_array(GLenum target) -{ - switch (target) { - case GL_TEXTURE_1D_ARRAY_EXT: - case GL_TEXTURE_2D_ARRAY_EXT: - case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: - case GL_TEXTURE_CUBE_MAP_ARRAY: - return GL_TRUE; default: - return GL_FALSE; + /* For non-generic compressed format we assert two things: + * + * 1. The format has already been validated against the set of available + * extensions. + * + * 2. The driver only enables the extension if it supports all of the + * formats that are part of that extension. + */ + if (_mesa_is_compressed_format(ctx, internalFormat)) + return _mesa_glenum_to_compressed_format(internalFormat); } + + _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()", + _mesa_enum_to_string(internalFormat)); + return MESA_FORMAT_NONE; }