i965: always set tiling for fbo depth buffer on sandybridge
authorZhenyu Wang <zhenyuw@linux.intel.com>
Thu, 30 Sep 2010 02:49:47 +0000 (10:49 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Thu, 30 Sep 2010 02:51:26 +0000 (10:51 +0800)
Sandybridge requires depth buffer must be tiling.

Fix 'fbo_firecube' demo.

src/mesa/drivers/dri/intel/intel_fbo.c

index 984585027c194262ef6086190c87a4dad5f4d579..8c0491d59aa286db7cdb942d1bb5682fabc3e1e7 100644 (file)
@@ -102,7 +102,7 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
 {
    struct intel_context *intel = intel_context(ctx);
    struct intel_renderbuffer *irb = intel_renderbuffer(rb);
-   int cpp;
+   int cpp, tiling;
 
    ASSERT(rb->Name != 0);
 
@@ -176,7 +176,13 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
    /* alloc hardware renderbuffer */
    DBG("Allocating %d x %d Intel RBO\n", width, height);
 
-   irb->region = intel_region_alloc(intel->intelScreen, I915_TILING_NONE, cpp,
+   tiling = I915_TILING_NONE;
+
+   /* Gen6 requires depth must be tiling */
+   if (intel->gen >= 6 && rb->Format == MESA_FORMAT_S8_Z24)
+       tiling = I915_TILING_Y;
+
+   irb->region = intel_region_alloc(intel->intelScreen, tiling, cpp,
                                    width, height, GL_TRUE);
    if (!irb->region)
       return GL_FALSE;       /* out of memory? */