intel: Merge our choosetexformat fallbacks into core.

We now share the type/format -> MESA_FORMAT_* mappings with software
mesa, and the core supports most of the fallbacks hardware drivers
will want.
This commit is contained in:
Eric Anholt
2011-01-04 13:44:34 -08:00
parent 001d944fd5
commit 5dbb856e96
6 changed files with 107 additions and 230 deletions

View File

@@ -683,6 +683,64 @@ intelInitContext(struct intel_context *intel,
} }
} }
memset(&ctx->TextureFormatSupported, 0,
sizeof(ctx->TextureFormatSupported));
ctx->TextureFormatSupported[MESA_FORMAT_ARGB8888] = GL_TRUE;
if (intel->has_xrgb_textures)
ctx->TextureFormatSupported[MESA_FORMAT_XRGB8888] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_ARGB4444] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_ARGB1555] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_RGB565] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_L8] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_A8] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_I8] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_AL88] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_AL1616] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_S8_Z24] = GL_TRUE;
/*
* This was disabled in initial FBO enabling to avoid combinations
* of depth+stencil that wouldn't work together. We since decided
* that it was OK, since it's up to the app to come up with the
* combo that actually works, so this can probably be re-enabled.
*/
/*
ctx->TextureFormatSupported[MESA_FORMAT_Z16] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_Z24] = GL_TRUE;
*/
/* ctx->Extensions.MESA_ycbcr_texture */
ctx->TextureFormatSupported[MESA_FORMAT_YCBCR] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_YCBCR_REV] = GL_TRUE;
/* GL_3DFX_texture_compression_FXT1 */
ctx->TextureFormatSupported[MESA_FORMAT_RGB_FXT1] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_RGBA_FXT1] = GL_TRUE;
/* GL_EXT_texture_compression_s3tc */
ctx->TextureFormatSupported[MESA_FORMAT_RGB_DXT1] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_RGBA_DXT1] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_RGBA_DXT3] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_RGBA_DXT5] = GL_TRUE;
#ifndef I915
/* GL_ARB_texture_rg */
ctx->TextureFormatSupported[MESA_FORMAT_R8] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_R16] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_RG88] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_RG1616] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_DUDV8] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_SIGNED_RGBA8888_REV] = GL_TRUE;
/* GL_EXT_texture_sRGB */
ctx->TextureFormatSupported[MESA_FORMAT_SARGB8] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_SRGB_DXT1] = GL_TRUE;
if (intel->has_luminance_srgb) {
ctx->TextureFormatSupported[MESA_FORMAT_SL8] = GL_TRUE;
ctx->TextureFormatSupported[MESA_FORMAT_SLA8] = GL_TRUE;
}
#endif
driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache, driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache,
sPriv->myNum, (intel->gen >= 4) ? "i965" : "i915"); sPriv->myNum, (intel->gen >= 4) ? "i965" : "i915");
if (intelScreen->deviceID == PCI_CHIP_I865_G) if (intelScreen->deviceID == PCI_CHIP_I865_G)

View File

@@ -115,7 +115,7 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffer
* except they're less useful because you can't texture with * except they're less useful because you can't texture with
* them. * them.
*/ */
rb->Format = intelChooseTextureFormat(ctx, internalFormat, rb->Format = intel->ctx.Driver.ChooseTextureFormat(ctx, internalFormat,
GL_NONE, GL_NONE); GL_NONE, GL_NONE);
break; break;
case GL_STENCIL_INDEX: case GL_STENCIL_INDEX:

View File

@@ -113,7 +113,6 @@ intelGenerateMipmap(struct gl_context *ctx, GLenum target,
void void
intelInitTextureFuncs(struct dd_function_table *functions) intelInitTextureFuncs(struct dd_function_table *functions)
{ {
functions->ChooseTextureFormat = intelChooseTextureFormat;
functions->GenerateMipmap = intelGenerateMipmap; functions->GenerateMipmap = intelGenerateMipmap;
functions->NewTextureObject = intelNewTextureObject; functions->NewTextureObject = intelNewTextureObject;

View File

@@ -40,8 +40,6 @@ void intelInitTextureSubImageFuncs(struct dd_function_table *functions);
void intelInitTextureCopyImageFuncs(struct dd_function_table *functions); void intelInitTextureCopyImageFuncs(struct dd_function_table *functions);
gl_format intelChooseTextureFormat(struct gl_context *ctx, GLint internalFormat,
GLenum format, GLenum type);
GLenum intel_mesa_format_to_rb_datatype(gl_format format); GLenum intel_mesa_format_to_rb_datatype(gl_format format);
void intelSetTexBuffer(__DRIcontext *pDRICtx, void intelSetTexBuffer(__DRIcontext *pDRICtx,

View File

@@ -35,230 +35,6 @@ intel_mesa_format_to_rb_datatype(gl_format format)
} }
} }
/**
* Choose hardware texture format given the user's glTexImage parameters.
*
* It works out that this function is fine for all the supported
* hardware. However, there is still a need to map the formats onto
* hardware descriptors.
*
* Note that the i915 can actually support many more formats than
* these if we take the step of simply swizzling the colors
* immediately after sampling...
*/
gl_format
intelChooseTextureFormat(struct gl_context * ctx, GLint internalFormat,
GLenum format, GLenum type)
{
struct intel_context *intel = intel_context(ctx);
#if 0
printf("%s intFmt=0x%x format=0x%x type=0x%x\n",
__FUNCTION__, internalFormat, format, type);
#endif
switch (internalFormat) {
case 4:
case GL_RGBA:
case GL_COMPRESSED_RGBA:
if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV)
return MESA_FORMAT_ARGB4444;
else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV)
return MESA_FORMAT_ARGB1555;
else
return MESA_FORMAT_ARGB8888;
case 3:
case GL_RGB:
case GL_COMPRESSED_RGB:
if (type == GL_UNSIGNED_SHORT_5_6_5)
return MESA_FORMAT_RGB565;
else if (intel->has_xrgb_textures)
return MESA_FORMAT_XRGB8888;
else
return MESA_FORMAT_ARGB8888;
case GL_RGBA8:
case GL_RGB10_A2:
case GL_RGBA12:
case GL_RGBA16:
return MESA_FORMAT_ARGB8888;
case GL_RGBA4:
case GL_RGBA2:
return MESA_FORMAT_ARGB4444;
case GL_RGB5_A1:
return MESA_FORMAT_ARGB1555;
case GL_RGB8:
case GL_RGB10:
case GL_RGB12:
case GL_RGB16:
if (intel->has_xrgb_textures)
return MESA_FORMAT_XRGB8888;
else
return MESA_FORMAT_ARGB8888;
case GL_RGB5:
case GL_RGB4:
case GL_R3_G3_B2:
return MESA_FORMAT_RGB565;
case GL_ALPHA:
case GL_ALPHA4:
case GL_ALPHA8:
case GL_ALPHA12:
case GL_ALPHA16:
case GL_COMPRESSED_ALPHA:
return MESA_FORMAT_A8;
case 1:
case GL_LUMINANCE:
case GL_LUMINANCE4:
case GL_LUMINANCE8:
case GL_LUMINANCE12:
case GL_LUMINANCE16:
case GL_COMPRESSED_LUMINANCE:
return MESA_FORMAT_L8;
case GL_LUMINANCE12_ALPHA4:
case GL_LUMINANCE12_ALPHA12:
case GL_LUMINANCE16_ALPHA16:
/* i915 could implement this mode using MT_32BIT_RG1616. However, this
* would require an extra swizzle instruction in the fragment shader to
* convert the { R, G, 1.0, 1.0 } to { R, R, R, G }.
*/
#ifndef I915
return MESA_FORMAT_AL1616;
#else
/* FALLTHROUGH */
#endif
case 2:
case GL_LUMINANCE_ALPHA:
case GL_LUMINANCE4_ALPHA4:
case GL_LUMINANCE6_ALPHA2:
case GL_LUMINANCE8_ALPHA8:
case GL_COMPRESSED_LUMINANCE_ALPHA:
return MESA_FORMAT_AL88;
case GL_INTENSITY:
case GL_INTENSITY4:
case GL_INTENSITY8:
case GL_INTENSITY12:
case GL_INTENSITY16:
case GL_COMPRESSED_INTENSITY:
return MESA_FORMAT_I8;
case GL_YCBCR_MESA:
if (type == GL_UNSIGNED_SHORT_8_8_MESA || type == GL_UNSIGNED_BYTE)
return MESA_FORMAT_YCBCR;
else
return MESA_FORMAT_YCBCR_REV;
case GL_COMPRESSED_RGB_FXT1_3DFX:
return MESA_FORMAT_RGB_FXT1;
case GL_COMPRESSED_RGBA_FXT1_3DFX:
return MESA_FORMAT_RGBA_FXT1;
case GL_RGB_S3TC:
case GL_RGB4_S3TC:
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
return MESA_FORMAT_RGB_DXT1;
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
return MESA_FORMAT_RGBA_DXT1;
case GL_RGBA_S3TC:
case GL_RGBA4_S3TC:
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
return MESA_FORMAT_RGBA_DXT3;
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
return MESA_FORMAT_RGBA_DXT5;
case GL_DEPTH_COMPONENT:
case GL_DEPTH_COMPONENT16:
case GL_DEPTH_COMPONENT24:
case GL_DEPTH_COMPONENT32:
#if 0
return MESA_FORMAT_Z16;
#else
/* fall-through.
* 16bpp depth texture can't be paired with a stencil buffer so
* always used combined depth/stencil format.
*/
#endif
case GL_DEPTH_STENCIL_EXT:
case GL_DEPTH24_STENCIL8_EXT:
return MESA_FORMAT_S8_Z24;
#ifndef I915
case GL_SRGB_EXT:
case GL_SRGB8_EXT:
case GL_SRGB_ALPHA_EXT:
case GL_SRGB8_ALPHA8_EXT:
case GL_COMPRESSED_SRGB_EXT:
case GL_COMPRESSED_SRGB_ALPHA_EXT:
case GL_COMPRESSED_SLUMINANCE_EXT:
case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
return MESA_FORMAT_SARGB8;
case GL_SLUMINANCE_EXT:
case GL_SLUMINANCE8_EXT:
if (intel->has_luminance_srgb)
return MESA_FORMAT_SL8;
else
return MESA_FORMAT_SARGB8;
case GL_SLUMINANCE_ALPHA_EXT:
case GL_SLUMINANCE8_ALPHA8_EXT:
if (intel->has_luminance_srgb)
return MESA_FORMAT_SLA8;
else
return MESA_FORMAT_SARGB8;
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
return MESA_FORMAT_SRGB_DXT1;
/* i915 could also do this */
case GL_DUDV_ATI:
case GL_DU8DV8_ATI:
return MESA_FORMAT_DUDV8;
case GL_RGBA_SNORM:
case GL_RGBA8_SNORM:
return MESA_FORMAT_SIGNED_RGBA8888_REV;
/* i915 can do a RG16, but it can't do any of the other RED or RG formats.
* In addition, it only implements the broken D3D mode where undefined
* components are read as 1.0. I'm not sure who thought reading
* { R, G, 1.0, 1.0 } from a red-green texture would be useful.
*/
case GL_RED:
case GL_COMPRESSED_RED:
case GL_R8:
return MESA_FORMAT_R8;
case GL_R16:
return MESA_FORMAT_R16;
case GL_RG:
case GL_COMPRESSED_RG:
case GL_RG8:
return MESA_FORMAT_RG88;
case GL_RG16:
return MESA_FORMAT_RG1616;
#endif
default:
fprintf(stderr, "unexpected texture format %s in %s\n",
_mesa_lookup_enum_by_nr(internalFormat), __FUNCTION__);
return MESA_FORMAT_NONE;
}
return MESA_FORMAT_NONE; /* never get here */
}
int intel_compressed_num_bytes(GLuint mesaFormat) int intel_compressed_num_bytes(GLuint mesaFormat)
{ {
GLuint bw, bh; GLuint bw, bh;

View File

@@ -68,14 +68,25 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
/* shallow RGBA formats */ /* shallow RGBA formats */
case 4: case 4:
case GL_RGBA: case GL_RGBA:
if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
} else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
}
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break;
case GL_RGBA8: case GL_RGBA8:
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break; break;
case GL_RGB5_A1: case GL_RGB5_A1:
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555); RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
break; break;
case GL_RGBA2: case GL_RGBA2:
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/ RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
break; break;
case GL_RGBA4: case GL_RGBA4:
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444); RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
@@ -84,10 +95,14 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
/* deep RGBA formats */ /* deep RGBA formats */
case GL_RGB10_A2: case GL_RGB10_A2:
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010); RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break; break;
case GL_RGBA12: case GL_RGBA12:
case GL_RGBA16: case GL_RGBA16:
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break; break;
/* shallow RGB formats */ /* shallow RGB formats */
@@ -95,12 +110,18 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_RGB: case GL_RGB:
case GL_RGB8: case GL_RGB8:
RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888); RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break; break;
case GL_R3_G3_B2: case GL_R3_G3_B2:
RETURN_IF_SUPPORTED(MESA_FORMAT_RGB332); RETURN_IF_SUPPORTED(MESA_FORMAT_RGB332);
RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break; break;
case GL_RGB4: case GL_RGB4:
RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */
RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
break; break;
case GL_RGB5: case GL_RGB5:
RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
@@ -111,6 +132,8 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_RGB12: case GL_RGB12:
case GL_RGB16: case GL_RGB16:
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break; break;
/* Alpha formats */ /* Alpha formats */
@@ -123,6 +146,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_ALPHA12: case GL_ALPHA12:
case GL_ALPHA16: case GL_ALPHA16:
RETURN_IF_SUPPORTED(MESA_FORMAT_A16); RETURN_IF_SUPPORTED(MESA_FORMAT_A16);
RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
break; break;
/* Luminance formats */ /* Luminance formats */
@@ -136,11 +160,13 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_LUMINANCE12: case GL_LUMINANCE12:
case GL_LUMINANCE16: case GL_LUMINANCE16:
RETURN_IF_SUPPORTED(MESA_FORMAT_L16); RETURN_IF_SUPPORTED(MESA_FORMAT_L16);
RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
break; break;
/* Luminance/Alpha formats */ /* Luminance/Alpha formats */
case GL_LUMINANCE4_ALPHA4: case GL_LUMINANCE4_ALPHA4:
RETURN_IF_SUPPORTED(MESA_FORMAT_AL44); RETURN_IF_SUPPORTED(MESA_FORMAT_AL44);
RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
break; break;
case 2: case 2:
@@ -154,6 +180,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_LUMINANCE12_ALPHA12: case GL_LUMINANCE12_ALPHA12:
case GL_LUMINANCE16_ALPHA16: case GL_LUMINANCE16_ALPHA16:
RETURN_IF_SUPPORTED(MESA_FORMAT_AL1616); RETURN_IF_SUPPORTED(MESA_FORMAT_AL1616);
RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
break; break;
case GL_INTENSITY: case GL_INTENSITY:
@@ -165,6 +192,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_INTENSITY12: case GL_INTENSITY12:
case GL_INTENSITY16: case GL_INTENSITY16:
RETURN_IF_SUPPORTED(MESA_FORMAT_I16); RETURN_IF_SUPPORTED(MESA_FORMAT_I16);
RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
break; break;
case GL_COLOR_INDEX: case GL_COLOR_INDEX:
@@ -187,10 +215,11 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_DEPTH_COMPONENT24: case GL_DEPTH_COMPONENT24:
case GL_DEPTH_COMPONENT32: case GL_DEPTH_COMPONENT32:
RETURN_IF_SUPPORTED(MESA_FORMAT_Z32); RETURN_IF_SUPPORTED(MESA_FORMAT_Z32);
RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
break; break;
case GL_DEPTH_COMPONENT16: case GL_DEPTH_COMPONENT16:
RETURN_IF_SUPPORTED(MESA_FORMAT_Z16); RETURN_IF_SUPPORTED(MESA_FORMAT_Z16);
break; RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
default: default:
; /* fallthrough */ ; /* fallthrough */
} }
@@ -216,6 +245,8 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
if (ctx->Extensions.TDFX_texture_compression_FXT1) if (ctx->Extensions.TDFX_texture_compression_FXT1)
RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1); RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888); RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break; break;
case GL_COMPRESSED_RGBA_ARB: case GL_COMPRESSED_RGBA_ARB:
if (ctx->Extensions.EXT_texture_compression_s3tc || if (ctx->Extensions.EXT_texture_compression_s3tc ||
@@ -224,6 +255,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
if (ctx->Extensions.TDFX_texture_compression_FXT1) if (ctx->Extensions.TDFX_texture_compression_FXT1)
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break; break;
default: default:
; /* fallthrough */ ; /* fallthrough */
@@ -337,6 +369,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_DEPTH_STENCIL_EXT: case GL_DEPTH_STENCIL_EXT:
case GL_DEPTH24_STENCIL8_EXT: case GL_DEPTH24_STENCIL8_EXT:
RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8); RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8);
RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
break; break;
default: default:
; /* fallthrough */ ; /* fallthrough */
@@ -359,6 +392,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_RGBA_SNORM: case GL_RGBA_SNORM:
case GL_RGBA8_SNORM: case GL_RGBA8_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
break; break;
default: default:
; /* fallthrough */ ; /* fallthrough */
@@ -406,24 +440,30 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_SRGB_EXT: case GL_SRGB_EXT:
case GL_SRGB8_EXT: case GL_SRGB8_EXT:
RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
case GL_SRGB_ALPHA_EXT: case GL_SRGB_ALPHA_EXT:
case GL_SRGB8_ALPHA8_EXT: case GL_SRGB8_ALPHA8_EXT:
RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
case GL_SLUMINANCE_EXT: case GL_SLUMINANCE_EXT:
case GL_SLUMINANCE8_EXT: case GL_SLUMINANCE8_EXT:
RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
case GL_SLUMINANCE_ALPHA_EXT: case GL_SLUMINANCE_ALPHA_EXT:
case GL_SLUMINANCE8_ALPHA8_EXT: case GL_SLUMINANCE8_ALPHA8_EXT:
RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
case GL_COMPRESSED_SLUMINANCE_EXT: case GL_COMPRESSED_SLUMINANCE_EXT:
RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
case GL_COMPRESSED_SRGB_EXT: case GL_COMPRESSED_SRGB_EXT:
#if FEATURE_texture_s3tc #if FEATURE_texture_s3tc
@@ -431,6 +471,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
#endif #endif
RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
case GL_COMPRESSED_SRGB_ALPHA_EXT: case GL_COMPRESSED_SRGB_ALPHA_EXT:
#if FEATURE_texture_s3tc #if FEATURE_texture_s3tc
@@ -438,23 +479,28 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */ RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */
#endif #endif
RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
#if FEATURE_texture_s3tc #if FEATURE_texture_s3tc
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
if (ctx->Extensions.EXT_texture_compression_s3tc) if (ctx->Extensions.EXT_texture_compression_s3tc)
RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
if (ctx->Extensions.EXT_texture_compression_s3tc) if (ctx->Extensions.EXT_texture_compression_s3tc)
RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT1); RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT1);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
if (ctx->Extensions.EXT_texture_compression_s3tc) if (ctx->Extensions.EXT_texture_compression_s3tc)
RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
if (ctx->Extensions.EXT_texture_compression_s3tc) if (ctx->Extensions.EXT_texture_compression_s3tc)
RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5); RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5);
RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
break; break;
#endif #endif
default: default: