r300g: Prevent multiple-use textures from getting incorrectly approved.
This commit is contained in:
parent
05fc9cdfdf
commit
36ccdf09b8
|
@ -182,16 +182,19 @@ static float r300_get_paramf(struct pipe_screen* pscreen, int param)
|
|||
static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage,
|
||||
boolean is_r500)
|
||||
{
|
||||
uint32_t retval = 0;
|
||||
|
||||
switch (format) {
|
||||
/* Supported formats. */
|
||||
/* Colorbuffer */
|
||||
case PIPE_FORMAT_A4R4G4B4_UNORM:
|
||||
case PIPE_FORMAT_R5G6B5_UNORM:
|
||||
case PIPE_FORMAT_A1R5G5B5_UNORM:
|
||||
return usage &
|
||||
retval = usage &
|
||||
(PIPE_TEXTURE_USAGE_RENDER_TARGET |
|
||||
PIPE_TEXTURE_USAGE_DISPLAY_TARGET |
|
||||
PIPE_TEXTURE_USAGE_PRIMARY);
|
||||
break;
|
||||
|
||||
/* Texture */
|
||||
case PIPE_FORMAT_A8R8G8B8_SRGB:
|
||||
|
@ -201,7 +204,8 @@ static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage,
|
|||
case PIPE_FORMAT_DXT3_RGBA:
|
||||
case PIPE_FORMAT_DXT5_RGBA:
|
||||
case PIPE_FORMAT_YCBCR:
|
||||
return usage & PIPE_TEXTURE_USAGE_SAMPLER;
|
||||
retval = usage & PIPE_TEXTURE_USAGE_SAMPLER;
|
||||
break;
|
||||
|
||||
/* Colorbuffer or texture */
|
||||
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||
|
@ -209,19 +213,21 @@ static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage,
|
|||
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
||||
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
||||
case PIPE_FORMAT_I8_UNORM:
|
||||
return usage &
|
||||
retval = usage &
|
||||
(PIPE_TEXTURE_USAGE_RENDER_TARGET |
|
||||
PIPE_TEXTURE_USAGE_DISPLAY_TARGET |
|
||||
PIPE_TEXTURE_USAGE_PRIMARY |
|
||||
PIPE_TEXTURE_USAGE_SAMPLER);
|
||||
break;
|
||||
|
||||
/* Z buffer or texture */
|
||||
case PIPE_FORMAT_Z16_UNORM:
|
||||
/* Z buffer with stencil or texture */
|
||||
case PIPE_FORMAT_Z24S8_UNORM:
|
||||
return usage &
|
||||
retval = usage &
|
||||
(PIPE_TEXTURE_USAGE_DEPTH_STENCIL |
|
||||
PIPE_TEXTURE_USAGE_SAMPLER);
|
||||
break;
|
||||
|
||||
/* Definitely unsupported formats. */
|
||||
/* Non-usable Z buffer/stencil formats. */
|
||||
|
@ -259,7 +265,13 @@ static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage,
|
|||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
/* If usage was a mask that contained multiple bits, and not all of them
|
||||
* are supported, this will catch that and return FALSE.
|
||||
* e.g. usage = 2 | 4; retval = 4; (retval >= usage) == FALSE
|
||||
*
|
||||
* This also returns FALSE for any unknown formats.
|
||||
*/
|
||||
return (retval >= usage);
|
||||
}
|
||||
|
||||
/* XXX moar targets */
|
||||
|
|
Loading…
Reference in New Issue