diff options
author | Topi Pohjolainen <[email protected]> | 2016-02-08 18:13:17 +0200 |
---|---|---|
committer | Topi Pohjolainen <[email protected]> | 2016-05-12 19:49:22 +0300 |
commit | a6e0f1cc7fff4009ea204c75d3f8a2f1e26e42ef (patch) | |
tree | 2120c9d77f21f9c04bd90f10807ee61ff9920116 /src | |
parent | 874c5f05dbc8eca2d14a14f32fdd964808c53b7e (diff) |
i965: Add helper for lossless compression support
v2: Check explicitly against base type of GL_FLOAT instead of
using _mesa_is_format_integer_color(). Otherwise we miss
GL_UNSIGNED_NORMALIZED.
v3 (Ben): Also call intel_miptree_supports_non_msrt_fast_clear()
in order to really check everything.
Signed-off-by: Topi Pohjolainen <[email protected]>
Reviewed-by: Ben Widawsky <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 26 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_mipmap_tree.h | 4 |
2 files changed, 30 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c index 1ead43fcc03..86fe07d7f3f 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c @@ -294,6 +294,32 @@ intel_miptree_is_lossless_compressed(const struct brw_context *brw, return mt->num_samples <= 1; } +bool +intel_miptree_supports_lossless_compressed(struct brw_context *brw, + const struct intel_mipmap_tree *mt) +{ + /* For now compression is only enabled for integer formats even though + * there exist supported floating point formats also. This is a heuristic + * decision based on current public benchmarks. In none of the cases these + * formats provided any improvement but a few cases were seen to regress. + * Hence these are left to to be enabled in the future when they are known + * to improve things. + */ + if (_mesa_get_format_datatype(mt->format) == GL_FLOAT) + return false; + + /* Fast clear mechanism and lossless compression go hand in hand. */ + if (!intel_miptree_supports_non_msrt_fast_clear(brw, mt)) + return false; + + /* Fast clear can be also used to clear srgb surfaces by using equivalent + * linear format. This trick, however, can't be extended to be used with + * lossless compression and therefore a check is needed to see if the format + * really is linear. + */ + return _mesa_get_srgb_format_linear(mt->format) == mt->format; +} + /** * Determine depth format corresponding to a depth+stencil format, * for separate stencil. diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h index 7862152cd97..4c6877eed9d 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h @@ -679,6 +679,10 @@ intel_miptree_supports_non_msrt_fast_clear(struct brw_context *brw, const struct intel_mipmap_tree *mt); bool +intel_miptree_supports_lossless_compressed(struct brw_context *brw, + const struct intel_mipmap_tree *mt); + +bool intel_miptree_alloc_non_msrt_mcs(struct brw_context *brw, struct intel_mipmap_tree *mt); |