use the requested internal texture format where possible
authorKeith Whitwell <keith@tungstengraphics.com>
Thu, 21 Sep 2006 10:07:04 +0000 (10:07 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Thu, 21 Sep 2006 10:07:04 +0000 (10:07 +0000)
src/mesa/drivers/dri/i965/brw_tex.c
src/mesa/drivers/dri/i965/brw_wm_surface_state.c

index 78d3514..47bd875 100644 (file)
@@ -59,27 +59,37 @@ brwChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
    case GL_RGB10_A2:
    case GL_RGBA12:
    case GL_RGBA16:
-   case GL_RGBA4:
-   case GL_RGBA2:
-   case GL_RGB5_A1:
       return &_mesa_texformat_argb8888; 
-/*       return &_mesa_texformat_rgba8888_rev; */
 
-   case 3:
-   case GL_RGB:
-   case GL_COMPRESSED_RGB:
    case GL_RGB8:
    case GL_RGB10:
    case GL_RGB12:
    case GL_RGB16:
-   case GL_RGB5:
-   case GL_RGB4:
-   case GL_R3_G3_B2:
-      /* Broadwater doesn't support RGB textures, so these must be
+      /* Broadwater doesn't support RGB888 textures, so these must be
        * stored as ARGB.
        */
       return &_mesa_texformat_argb8888;
 
+   case 3:
+   case GL_COMPRESSED_RGB:
+   case GL_RGB:
+      if (format == GL_RGB &&
+         type == GL_UNSIGNED_SHORT_5_6_5)
+        return &_mesa_texformat_rgb565;
+      else
+        return &_mesa_texformat_argb8888;
+
+
+   case GL_RGB5:
+   case GL_RGB5_A1:
+      return &_mesa_texformat_argb1555;
+
+   case GL_R3_G3_B2:
+   case GL_RGBA2:
+   case GL_RGBA4:
+   case GL_RGB4:
+      return &_mesa_texformat_argb4444;
+
    case GL_ALPHA:
    case GL_ALPHA4:
    case GL_ALPHA8:
index 6ccf56e..5c7dc50 100644 (file)
@@ -85,7 +85,8 @@ static GLuint translate_tex_format( GLuint mesa_format )
       return BRW_SURFACEFORMAT_L8A8_UNORM;
 
    case MESA_FORMAT_RGB888:
-      return BRW_SURFACEFORMAT_R8G8B8_UNORM;
+      assert(0);               /* not supported for sampling */
+      return BRW_SURFACEFORMAT_R8G8B8_UNORM;      
 
    case MESA_FORMAT_ARGB8888:
       return BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
@@ -93,6 +94,15 @@ static GLuint translate_tex_format( GLuint mesa_format )
    case MESA_FORMAT_RGBA8888_REV:
       return BRW_SURFACEFORMAT_R8G8B8A8_UNORM;
 
+   case MESA_FORMAT_RGB565:
+      return BRW_SURFACEFORMAT_B5G6R5_UNORM;
+
+   case MESA_FORMAT_ARGB1555:
+      return BRW_SURFACEFORMAT_B5G5R5A1_UNORM;
+
+   case MESA_FORMAT_ARGB4444:
+      return BRW_SURFACEFORMAT_B4G4R4A4_UNORM;
+
    case MESA_FORMAT_YCBCR_REV:
       return BRW_SURFACEFORMAT_YCRCB_NORMAL;