diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2014-02-07 22:22:45 -0800 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2014-02-19 01:46:16 -0800 |
commit | 09d9a8913e8c28fc4c1c60d7da85a2f093786894 (patch) | |
tree | 176b683f0512aa6f286507ac71439b5d3697172b /src/mesa/drivers/dri/i965/brw_surface_formats.c | |
parent | 4695f64895ed016e8c13b87315fb28fd91a26668 (diff) | |
download | external_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.c | 41 |
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) |