i965: Add support for GL_ARB_depth_buffer_float under 3.0 override.
authorEric Anholt <eric@anholt.net>
Fri, 18 Nov 2011 01:19:12 +0000 (17:19 -0800)
committerEric Anholt <eric@anholt.net>
Mon, 19 Dec 2011 21:20:11 +0000 (13:20 -0800)
This is not exposed generally yet because some of the swrast paths hit
in piglit (drawpixels, copypixels, blit) aren't yet converted to
MapRenderbuffer.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_misc_state.c
src/mesa/drivers/dri/i965/brw_wm_surface_state.c
src/mesa/drivers/dri/intel/intel_extensions.c
src/mesa/drivers/dri/intel/intel_tex_format.c

index ad49c8fe688f193d9975b674cbbe75554655b017..e76901a31364da19f31a2bec1eff72f4faf88526 100644 (file)
@@ -209,7 +209,8 @@ brw_depthbuffer_format(struct brw_context *brw)
    if (!drb &&
        (srb = intel_get_renderbuffer(fb, BUFFER_STENCIL)) &&
        !srb->mt->stencil_mt &&
-       srb->Base.Format == MESA_FORMAT_S8_Z24) {
+       (srb->Base.Format == MESA_FORMAT_S8_Z24 ||
+       srb->Base.Format == MESA_FORMAT_Z32_FLOAT_X24S8)) {
       drb = srb;
    }
 
@@ -225,6 +226,8 @@ brw_depthbuffer_format(struct brw_context *brw)
       return BRW_DEPTHFORMAT_D24_UNORM_X8_UINT;
    case MESA_FORMAT_S8_Z24:
       return BRW_DEPTHFORMAT_D24_UNORM_S8_UINT;
+   case MESA_FORMAT_Z32_FLOAT_X24S8:
+      return BRW_DEPTHFORMAT_D32_FLOAT_S8X24_UINT;
    default:
       _mesa_problem(ctx, "Unexpected depth format %s\n",
                    _mesa_get_format_name(drb->Base.Format));
index d36b6f871b19330cb471679dec2c3ea9a664a602..7a959522a09c9cbe912bd27b4e663c2fde96e55e 100644 (file)
@@ -541,12 +541,16 @@ brw_init_surface_formats(struct brw_context *brw)
    brw->format_supported_as_render_target[MESA_FORMAT_X8_Z24] = true;
    brw->format_supported_as_render_target[MESA_FORMAT_S8] = true;
    brw->format_supported_as_render_target[MESA_FORMAT_Z16] = true;
+   brw->format_supported_as_render_target[MESA_FORMAT_Z32_FLOAT] = true;
+   brw->format_supported_as_render_target[MESA_FORMAT_Z32_FLOAT_X24S8] = true;
 
    /* We remap depth formats to a supported texturing format in
     * translate_tex_format().
     */
    ctx->TextureFormatSupported[MESA_FORMAT_S8_Z24] = true;
    ctx->TextureFormatSupported[MESA_FORMAT_X8_Z24] = true;
+   ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT] = true;
+   ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8] = true;
 }
 
 bool
@@ -574,6 +578,12 @@ translate_tex_format(gl_format mesa_format,
    case MESA_FORMAT_X8_Z24:
       return BRW_SURFACEFORMAT_I24X8_UNORM;
 
+   case MESA_FORMAT_Z32_FLOAT:
+      return BRW_SURFACEFORMAT_I32_FLOAT;
+
+   case MESA_FORMAT_Z32_FLOAT_X24S8:
+      return BRW_SURFACEFORMAT_R32G32_FLOAT;
+
    case MESA_FORMAT_SARGB8:
    case MESA_FORMAT_SLA8:
    case MESA_FORMAT_SL8:
index 681f5f254962e319109a266360617b8072dbe228..2e2a31f89ebc810f0bc040ee348e0a355a15aa14 100644 (file)
@@ -109,6 +109,8 @@ intelInitExtensions(struct gl_context *ctx)
 
    if (intel->gen >= 4) {
       ctx->Extensions.ARB_color_buffer_float = true;
+      if (override_version >= 30)
+        ctx->Extensions.ARB_depth_buffer_float = true;
       ctx->Extensions.ARB_depth_clamp = true;
       ctx->Extensions.ARB_fragment_coord_conventions = true;
       ctx->Extensions.ARB_fragment_program_shadow = true;
index 898846fd233524f8aec7728ff1c0daa368c23428..f53054d55d302800a44c24c5577b954e9ee974bb 100644 (file)
@@ -41,6 +41,10 @@ intel_mesa_format_to_rb_datatype(gl_format format)
    case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
       return GL_FLOAT;
 
+      /* The core depthstencil wrappers demand this. */
+   case MESA_FORMAT_Z32_FLOAT_X24S8:
+      return GL_FLOAT_32_UNSIGNED_INT_24_8_REV;
+
    default:
       /* Unsupported format.  We may hit this when people ask for FBO-incomplete
        * formats.