i965/clear: Quantize the depth clear value based on the format
authorJason Ekstrand <jason.ekstrand@intel.com>
Sun, 20 Aug 2017 03:31:03 +0000 (20:31 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 22 Aug 2017 05:18:53 +0000 (22:18 -0700)
commit0ae9ce0f29ea1973b850a4e6c6cae8606973036e
tree0ce54d5ea820b18946c7dc348006353ed14f2a5f
parent3c9ed70d928461eb4968b982ce444c79a734f2b2
i965/clear: Quantize the depth clear value based on the format

In f9fd976e8adba733b08d we changed the clear value to be stored as an
isl_color_value.  This had the side-effect same clear value check is now
happening directly between the f32[0] field of the isl_color_value and
ctx->Depth.Clear.  This isn't what we want for two reasons.  One is that
the comparison happens in floating point even for Z16 and Z24 formats.
Worse than that, ctx->Depth.Clear is a double so, even for 32-bit float
formats, we were comparing as doubles and not floats.  This means that
the test basically always fails for anything other than 0.0f and 1.0f.
This caused a slight performance regression in Lightsmark 2008 because
it was using a depth clear value of 0.999 which can't be stored in a
32-bit float so we were doing unneeded resolves.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Bugzilla: https://bugs.freedesktop.org/101678
Cc: "17.2" <mesa-stable@lists.freedesktop.org>
src/mesa/drivers/dri/i965/brw_clear.c