st/mesa: try to get actual compressed format for GL_COMPRESSED_RGB[A] formats

This commit is contained in:
Brian Paul
2010-04-27 09:11:36 -06:00
parent 7567f05199
commit 29edc2a8b5
+20 -2
View File
@@ -402,14 +402,12 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
switch (internalFormat) {
case 4:
case GL_RGBA:
case GL_COMPRESSED_RGBA:
case GL_RGBA8:
case GL_RGB10_A2:
case GL_RGBA12:
return default_rgba_format( screen, target, tex_usage, geom_flags );
case 3:
case GL_RGB:
case GL_COMPRESSED_RGB:
return default_rgb_format( screen, target, tex_usage, geom_flags );
case GL_RGBA16:
return default_rgba_format( screen, target, tex_usage, geom_flags );
@@ -495,6 +493,26 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
}
return PIPE_FORMAT_NONE;
case GL_COMPRESSED_RGB:
/* can only sample from compressed formats */
if (tex_usage & ~PIPE_BIND_SAMPLER_VIEW)
return PIPE_FORMAT_NONE;
else if (screen->is_format_supported(screen, PIPE_FORMAT_DXT1_RGB,
target, tex_usage, geom_flags))
return PIPE_FORMAT_DXT1_RGB;
else
return default_rgb_format(screen, target, tex_usage, geom_flags);
case GL_COMPRESSED_RGBA:
/* can only sample from compressed formats */
if (tex_usage & ~PIPE_BIND_SAMPLER_VIEW)
return PIPE_FORMAT_NONE;
else if (screen->is_format_supported(screen, PIPE_FORMAT_DXT3_RGBA,
target, tex_usage, geom_flags))
return PIPE_FORMAT_DXT3_RGBA;
else
return default_rgba_format(screen, target, tex_usage, geom_flags);
case GL_RGB_S3TC:
case GL_RGB4_S3TC:
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: