summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_surface_formats.c
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2014-02-07 22:22:45 -0800
committerKenneth Graunke <kenneth@whitecape.org>2014-02-19 01:46:16 -0800
commit09d9a8913e8c28fc4c1c60d7da85a2f093786894 (patch)
tree176b683f0512aa6f286507ac71439b5d3697172b /src/mesa/drivers/dri/i965/brw_surface_formats.c
parent4695f64895ed016e8c13b87315fb28fd91a26668 (diff)
downloadexternal_mesa3d-09d9a8913e8c28fc4c1c60d7da85a2f093786894.zip
external_mesa3d-09d9a8913e8c28fc4c1c60d7da85a2f093786894.tar.gz
external_mesa3d-09d9a8913e8c28fc4c1c60d7da85a2f093786894.tar.bz2
i965: Pull format conversion logic out of brw_depthbuffer_format.
brw_depthbuffer_format is not very reusable at the moment, since it uses global state (ctx->DrawBuffer) to access a particular depth buffer. For HiZ on Broadwell, I need a function which simply converts the formats. However, at least one existing user of brw_depthbuffer_format really wants the existing interface. So, I've created a new function. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_surface_formats.c')
-rw-r--r--src/mesa/drivers/dri/i965/brw_surface_formats.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_surface_formats.c b/src/mesa/drivers/dri/i965/brw_surface_formats.c
index 6a7e00a..b2c36d9 100644
--- a/src/mesa/drivers/dri/i965/brw_surface_formats.c
+++ b/src/mesa/drivers/dri/i965/brw_surface_formats.c
@@ -730,6 +730,47 @@ translate_tex_format(struct brw_context *brw,
}
}
+/**
+ * Convert a MESA_FORMAT to the corresponding BRW_DEPTHFORMAT enum.
+ */
+uint32_t
+brw_depth_format(struct brw_context *brw, mesa_format format)
+{
+ switch (format) {
+ case MESA_FORMAT_Z_UNORM16:
+ return BRW_DEPTHFORMAT_D16_UNORM;
+ case MESA_FORMAT_Z_FLOAT32:
+ return BRW_DEPTHFORMAT_D32_FLOAT;
+ case MESA_FORMAT_Z24_UNORM_S8_UINT:
+ if (brw->gen >= 6) {
+ return BRW_DEPTHFORMAT_D24_UNORM_X8_UINT;
+ } else {
+ /* Use D24_UNORM_S8, not D24_UNORM_X8.
+ *
+ * D24_UNORM_X8 was not introduced until Gen5. (See the Ironlake PRM,
+ * Volume 2, Part 1, Section 8.4.6 "Depth/Stencil Buffer State", Bits
+ * 3DSTATE_DEPTH_BUFFER.Surface_Format).
+ *
+ * However, on Gen5, D24_UNORM_X8 may be used only if separate
+ * stencil is enabled, and we never enable it. From the Ironlake PRM,
+ * same section as above, 3DSTATE_DEPTH_BUFFER's
+ * "Separate Stencil Buffer Enable" bit:
+ *
+ * "If this field is disabled, the Surface Format of the depth
+ * buffer cannot be D24_UNORM_X8_UINT."
+ */
+ return BRW_DEPTHFORMAT_D24_UNORM_S8_UINT;
+ }
+ case MESA_FORMAT_Z24_UNORM_X8_UINT:
+ return BRW_DEPTHFORMAT_D24_UNORM_X8_UINT;
+ case MESA_FORMAT_Z32_FLOAT_S8X24_UINT:
+ return BRW_DEPTHFORMAT_D32_FLOAT_S8X24_UINT;
+ default:
+ assert(!"Unexpected depth format.");
+ return BRW_DEPTHFORMAT_D32_FLOAT;
+ }
+}
+
/** Can HiZ be enabled on a depthbuffer of the given format? */
bool
brw_is_hiz_depth_format(struct brw_context *brw, mesa_format format)