In some cases, Intel hardware requires that depth and stencil buffers be
separate. To accommodate swrast, i965 resorts to hackery that causes
a segfault in the fastpaths of draw_depth_stencil_pixels() and
read_depth_stencil_pixels().
The hack is that i965 sets framebuffer->Attachment[BUFFER_DEPTH].Renderbuffer
and framebuffer->Attachment[BUFFER_STENCIL].Renderbuffer to a dummy
renderbuffer for which the GetRow accessors and friends are null. The real
buffers are located at framebuffer->_DepthBuffer and framebuffer->_Stencilbuffer.
To fix the segault, this patch skips the fastpath if
framebuffer->Attachment[BUFFER_DEPTH].Renderbuffer->GetRow is null.
Note: This is a candidate for the 7.11 branch.
Reviewed-by: Brian Paul <brianp@vmware.com>
Signed-off-by: Chad Versace <chad@chad-versace.us>
depthRb->Format == MESA_FORMAT_Z24_S8 &&
type == GL_UNSIGNED_INT_24_8 &&
depthRb == stencilRb &&
+ depthRb->GetRow && /* May be null if depthRb is a wrapper around
+ * separate depth and stencil buffers. */
!scaleOrBias &&
!zoom &&
ctx->Depth.Mask &&
depthRb->Format == MESA_FORMAT_Z24_S8 &&
type == GL_UNSIGNED_INT_24_8 &&
depthRb == stencilRb &&
+ depthRb->GetRow && /* May be null if depthRb is a wrapper around
+ * separate depth and stencil buffers. */
!scaleOrBias &&
!stencilTransfer) {
/* This is the ideal case.