From 507e71e45a2e46c6e01423ab00948a72f435396c Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 17 Nov 2011 17:19:12 -0800 Subject: [PATCH] i965: Add support for GL_ARB_depth_buffer_float under 3.0 override. 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 --- src/mesa/drivers/dri/i965/brw_misc_state.c | 5 ++++- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 10 ++++++++++ src/mesa/drivers/dri/intel/intel_extensions.c | 2 ++ src/mesa/drivers/dri/intel/intel_tex_format.c | 4 ++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c index ad49c8fe688..e76901a3136 100644 --- a/src/mesa/drivers/dri/i965/brw_misc_state.c +++ b/src/mesa/drivers/dri/i965/brw_misc_state.c @@ -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)); diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c index d36b6f871b1..7a959522a09 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -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: diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c index 681f5f25496..2e2a31f89eb 100644 --- a/src/mesa/drivers/dri/intel/intel_extensions.c +++ b/src/mesa/drivers/dri/intel/intel_extensions.c @@ -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; diff --git a/src/mesa/drivers/dri/intel/intel_tex_format.c b/src/mesa/drivers/dri/intel/intel_tex_format.c index 898846fd233..f53054d55d3 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_format.c +++ b/src/mesa/drivers/dri/intel/intel_tex_format.c @@ -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.