i915: Don't use XRGB8888 on 830 and 845.
authorEric Anholt <eric@anholt.net>
Fri, 4 Jun 2010 20:40:48 +0000 (13:40 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 4 Jun 2010 20:40:48 +0000 (13:40 -0700)
The support for XRGB8888 appeared in the 855 and 865, and this format
is reserved on 830/845.  This should fix a regression from
b4a6169412819cc3a027c6a118f0537911145a30 that caused hangs in etracer
on 845s.

Bug #26557.

src/mesa/drivers/dri/intel/intel_context.c
src/mesa/drivers/dri/intel/intel_context.h
src/mesa/drivers/dri/intel/intel_tex_format.c

index 9159f6ec147ce8c7fb860cd7cb084d1ffcf826a1..c22062c455d8ede13cb843c09d4dcf53b4d99174 100644 (file)
@@ -635,6 +635,7 @@ intelInitContext(struct intel_context *intel,
    intel->driContext = driContextPriv;
    intel->driFd = sPriv->fd;
 
+   intel->has_xrgb_textures = GL_TRUE;
    if (IS_GEN6(intel->intelScreen->deviceID)) {
       intel->gen = 6;
       intel->needs_ff_sync = GL_TRUE;
@@ -656,6 +657,10 @@ intelInitContext(struct intel_context *intel,
       }
    } else {
       intel->gen = 2;
+      if (intel->intelScreen->deviceID == PCI_CHIP_I830_M ||
+         intel->intelScreen->deviceID == PCI_CHIP_845_G) {
+        intel->has_xrgb_textures = GL_FALSE;
+      }
    }
 
    driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache,
index 04d5fc92a251af35ac14dcefef0d1bf58dbcb038..6329ba6c13406e0e4e94f9eb1b9103167141593b 100644 (file)
@@ -145,6 +145,7 @@ struct intel_context
    GLboolean is_g4x;
    GLboolean is_945;
    GLboolean has_luminance_srgb;
+   GLboolean has_xrgb_textures;
 
    int urb_size;
 
index b42d6f3155c550c42bd821697e96ef63d2e44bde..5f813c0efa2d2c2e23d1d8c70e7d8b13ab75f4d2 100644 (file)
@@ -49,7 +49,14 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
       if (format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5) {
          return MESA_FORMAT_RGB565;
       }
-      return do32bpt ? MESA_FORMAT_XRGB8888 : MESA_FORMAT_RGB565;
+      if (do32bpt) {
+        if (intel->has_xrgb_textures)
+           return MESA_FORMAT_XRGB8888;
+        else
+           return MESA_FORMAT_ARGB8888;
+      } else {
+        return MESA_FORMAT_RGB565;
+      }
 
    case GL_RGBA8:
    case GL_RGB10_A2:
@@ -68,7 +75,10 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
    case GL_RGB10:
    case GL_RGB12:
    case GL_RGB16:
-      return MESA_FORMAT_XRGB8888;
+      if (intel->has_xrgb_textures)
+        return MESA_FORMAT_XRGB8888;
+      else
+        return MESA_FORMAT_ARGB8888;
 
    case GL_RGB5:
    case GL_RGB4: