|
|
@@ -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 */ |