mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 09:00:10 +01:00
mesa: Do something sensible when on-line compression is requested but not possible
It is possible to force S3TC extensions to be enabled. This is generally done to support applications that will only supply pre-compressed textures. This accounts for the vast majority of applications. However, there is still the possibility of an application asking for on-line compression. In that case, generate a warning and substitute a generic compressed format. The driver will either pick an uncompressed format or a compressed format that Mesa can handle on-line (e.g., FXT1). This should only cause problems for applications that request on-line compression and read the compressed texture back. This is likely an infinitesimal subset of an already infinitesimal subset. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
0e0d664461
commit
42723d88d3
1 changed files with 31 additions and 0 deletions
|
|
@ -2799,6 +2799,37 @@ _mesa_choose_texture_format(struct gl_context *ctx,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the application requested compression to an S3TC format but we don't
|
||||||
|
* have the DTXn library, force a generic compressed format instead.
|
||||||
|
*/
|
||||||
|
if (internalFormat != format) {
|
||||||
|
const GLenum before = internalFormat;
|
||||||
|
|
||||||
|
switch (internalFormat) {
|
||||||
|
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||||
|
if (!ctx->Mesa_DXTn)
|
||||||
|
internalFormat = GL_COMPRESSED_RGB;
|
||||||
|
break;
|
||||||
|
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||||
|
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||||||
|
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||||
|
if (!ctx->Mesa_DXTn)
|
||||||
|
internalFormat = GL_COMPRESSED_RGBA;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (before != internalFormat) {
|
||||||
|
_mesa_warning(ctx,
|
||||||
|
"DXT compression requested (%s), "
|
||||||
|
"but libtxc_dxtn library not installed. Using %s "
|
||||||
|
"instead.",
|
||||||
|
_mesa_lookup_enum_by_nr(before),
|
||||||
|
_mesa_lookup_enum_by_nr(internalFormat));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* choose format from scratch */
|
/* choose format from scratch */
|
||||||
f = ctx->Driver.ChooseTextureFormat(ctx, texObj->Target, internalFormat,
|
f = ctx->Driver.ChooseTextureFormat(ctx, texObj->Target, internalFormat,
|
||||||
format, type);
|
format, type);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue