llvmpipe: Be more conservative with the supported formats.

We'll likely support much more formats, but doing this allows to run
more testsuites without immediately hit assertion failures.
This commit is contained in:
José Fonseca 2009-11-10 17:51:06 -08:00
parent c6d663e6dc
commit b375526b50

View file

@ -27,6 +27,7 @@
#include "util/u_memory.h"
#include "util/u_format.h"
#include "pipe/p_defines.h"
#include "pipe/p_screen.h"
@ -131,17 +132,17 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
{
struct llvmpipe_screen *screen = llvmpipe_screen(_screen);
struct llvmpipe_winsys *winsys = screen->winsys;
const struct util_format_description *format_desc;
format_desc = util_format_description(format);
if(!format_desc)
return FALSE;
assert(target == PIPE_TEXTURE_1D ||
target == PIPE_TEXTURE_2D ||
target == PIPE_TEXTURE_3D ||
target == PIPE_TEXTURE_CUBE);
if(format == PIPE_FORMAT_Z16_UNORM)
return FALSE;
if(format == PIPE_FORMAT_S8_UNORM)
return FALSE;
switch(format) {
case PIPE_FORMAT_DXT1_RGB:
case PIPE_FORMAT_DXT1_RGBA:
@ -152,8 +153,51 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
break;
}
if(tex_usage & PIPE_TEXTURE_USAGE_DISPLAY_TARGET)
return winsys->is_displaytarget_format_supported(winsys, format);
if(tex_usage & PIPE_TEXTURE_USAGE_RENDER_TARGET) {
if(format_desc->block.width != 1 ||
format_desc->block.height != 1)
return FALSE;
if(format_desc->layout != UTIL_FORMAT_LAYOUT_SCALAR &&
format_desc->layout != UTIL_FORMAT_LAYOUT_ARITH &&
format_desc->layout != UTIL_FORMAT_LAYOUT_ARRAY)
return FALSE;
if(format_desc->colorspace != UTIL_FORMAT_COLORSPACE_RGB &&
format_desc->colorspace != UTIL_FORMAT_COLORSPACE_SRGB)
return FALSE;
}
if(tex_usage & PIPE_TEXTURE_USAGE_DISPLAY_TARGET) {
if(!winsys->is_displaytarget_format_supported(winsys, format))
return FALSE;
}
if(tex_usage & PIPE_TEXTURE_USAGE_DEPTH_STENCIL) {
if(format_desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS)
return FALSE;
/* FIXME: Temporary restriction. See lp_state_fs.c. */
if(format_desc->block.bits != 32)
return FALSE;
}
/* FIXME: Temporary restrictions. See lp_bld_sample_soa.c */
if(tex_usage & PIPE_TEXTURE_USAGE_SAMPLER) {
if(format_desc->block.width != 1 ||
format_desc->block.height != 1)
return FALSE;
if(format_desc->layout != UTIL_FORMAT_LAYOUT_SCALAR &&
format_desc->layout != UTIL_FORMAT_LAYOUT_ARITH &&
format_desc->layout != UTIL_FORMAT_LAYOUT_ARRAY)
return FALSE;
if(format_desc->colorspace != UTIL_FORMAT_COLORSPACE_RGB &&
format_desc->colorspace != UTIL_FORMAT_COLORSPACE_SRGB &&
format_desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS)
return FALSE;
}
return TRUE;
}