diff options
Diffstat (limited to 'src/gallium/drivers')
| -rw-r--r-- | src/gallium/drivers/r300/r300_screen.c | 31 | ||||
| -rw-r--r-- | src/gallium/drivers/r300/r300_texture.h | 11 | 
2 files changed, 36 insertions, 6 deletions
diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c index 711c22577c..6817d7163d 100644 --- a/src/gallium/drivers/r300/r300_screen.c +++ b/src/gallium/drivers/r300/r300_screen.c @@ -94,8 +94,7 @@ static int r300_get_param(struct pipe_screen* pscreen, int param)                  return 0;              }          case PIPE_CAP_S3TC: -            /* IN THEORY */ -            return 0; +            return 1;          case PIPE_CAP_ANISOTROPIC_FILTER:              return 1;          case PIPE_CAP_POINT_SPRITE: @@ -182,7 +181,8 @@ static float r300_get_paramf(struct pipe_screen* pscreen, int param)      }  } -static boolean check_tex_2d_format(enum pipe_format format, boolean is_r500) +static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage, +                                   boolean is_r500)  {      switch (format) {          /* Supported formats. */ @@ -190,14 +190,33 @@ static boolean check_tex_2d_format(enum pipe_format format, boolean is_r500)          case PIPE_FORMAT_A4R4G4B4_UNORM:          case PIPE_FORMAT_R5G6B5_UNORM:          case PIPE_FORMAT_A1R5G5B5_UNORM: -        case PIPE_FORMAT_A8R8G8B8_UNORM: +            return usage & +                (PIPE_TEXTURE_USAGE_RENDER_TARGET | +                 PIPE_TEXTURE_USAGE_DISPLAY_TARGET | +                 PIPE_TEXTURE_USAGE_PRIMARY); + +        /* Texture */ +        case PIPE_FORMAT_DXT1_RGB: +        case PIPE_FORMAT_DXT1_RGBA: +        case PIPE_FORMAT_DXT3_RGBA: +        case PIPE_FORMAT_DXT5_RGBA: +            return usage & PIPE_TEXTURE_USAGE_SAMPLER; +          /* Colorbuffer or texture */ +        case PIPE_FORMAT_A8R8G8B8_UNORM: +        case PIPE_FORMAT_R8G8B8A8_UNORM:          case PIPE_FORMAT_I8_UNORM: +            return usage & +                (PIPE_TEXTURE_USAGE_RENDER_TARGET | +                 PIPE_TEXTURE_USAGE_DISPLAY_TARGET | +                 PIPE_TEXTURE_USAGE_PRIMARY | +                 PIPE_TEXTURE_USAGE_SAMPLER); +          /* Z buffer */          case PIPE_FORMAT_Z16_UNORM:          /* Z buffer with stencil */          case PIPE_FORMAT_Z24S8_UNORM: -            return TRUE; +            return usage & PIPE_TEXTURE_USAGE_DEPTH_STENCIL;          /* Definitely unsupported formats. */          /* Non-usable Z buffer/stencil formats. */ @@ -247,7 +266,7 @@ static boolean r300_is_format_supported(struct pipe_screen* pscreen,  {      switch (target) {          case PIPE_TEXTURE_2D: -            return check_tex_2d_format(format, +            return check_tex_2d_format(format, tex_usage,                  r300_screen(pscreen)->caps->is_r500);          case PIPE_TEXTURE_1D:          case PIPE_TEXTURE_3D: diff --git a/src/gallium/drivers/r300/r300_texture.h b/src/gallium/drivers/r300/r300_texture.h index e2429c0738..28157de57b 100644 --- a/src/gallium/drivers/r300/r300_texture.h +++ b/src/gallium/drivers/r300/r300_texture.h @@ -44,6 +44,17 @@ static INLINE uint32_t r300_translate_texformat(enum pipe_format format)              return R300_EASY_TX_FORMAT(X, Y, Z, W, W8Z8Y8X8);          case PIPE_FORMAT_R8G8B8A8_UNORM:              return R300_EASY_TX_FORMAT(Y, Z, W, X, W8Z8Y8X8); +        /* DXT1 */ +        case PIPE_FORMAT_DXT1_RGB: +            return R300_EASY_TX_FORMAT(X, Y, Z, ONE, DXT1); +        case PIPE_FORMAT_DXT1_RGBA: +            return R300_EASY_TX_FORMAT(X, Y, Z, W, DXT1); +        /* DXT3 */ +        case PIPE_FORMAT_DXT3_RGBA: +            return R300_EASY_TX_FORMAT(X, Y, Z, W, DXT3); +        /* DXT5 */ +        case PIPE_FORMAT_DXT5_RGBA: +            return R300_EASY_TX_FORMAT(Y, Z, W, X, DXT5);          default:              debug_printf("r300: Implementation error: "                  "Got unsupported texture format %s in %s\n",  | 
