Equalizer logo
Collage logo
GPU-SD logo

Depth Buffer Pixel Transfer Optimization

Author: eilemann@gmail.com
State: Not usable (see Implementation)

Overview

Depth buffer writes on nVidia (ATI unverified) cards can be relatively slow, for example ~20 FPS at 1280x1024 on a Quadro fx3550. The GL_EXT_packed_depth_stencil extension can be used to bring depth buffer pixel transfer performance in line with color buffer performance (~200 FPS). Note that the GL_NV_packed_depth_stencil is virtually the same extension.

Preconditions

The following conditions have to be true:

  1. One of the extensions has to be available
  2. The OpenGL drawable has a stencil buffer, otherwise a GL_INVALID_OPERATION error is generated
  3. Condition 1. and 2. have to apply to the source and all destination channels
  4. The pixel transfer using the extension is faster than an ordinary GL_DEPTH_COMPONENT transfers

Implementation

The extension is not useful for Equalizer. Depth writes are used for a z-based reassembly in DB (sort-last) compound. However, using the GL_DEPTH_STENCIL_EXT bypasses "the OpenGL fragment pipeline entirely, unlike the treatment of GL_DEPTH_COMPONENT data. The stencil and depth masks are applied, as are the pixel ownership and scissor tests, but all other operations are skipped." (quote from the extension specification). This means that no stencil test is performed, which is needed for the z-based assembly (cf. eq::Image::_startAssembleDB()).

Open Issues

Try using a textured quad and a fragment shader for z-based assembly