[Mesa-dev] [PATCH 7/7] [v2] i965/gen9: Support fast clears for 32b float

Ben Widawsky benjamin.widawsky at intel.com
Tue Nov 17 17:31:50 PST 2015


SKL supports the ability to do fast clears and resolves of 32b RGBA as both
integer and floats. This patch only enables float color clears because we
haven't yet enabled integer color clears, (HW support for that was added in
BDW).

Two formats are explicitly disabled because they fail piglit tests, LUMINANCE16F
and INTENSITY16F. There is some question about the validity of sampling from
these surfaces for all gens, however, there seem to be no other failures, so I'd
prefer to leave tackling that for a separate series.

v2: Remove LUMINANCE16F and INTENSITY16F special cases since they are now
handled by Neil's patch to disable MSAA fast clears.

Cc: Neil Roberts <neil at linux.intel.com>
Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
---
 src/mesa/drivers/dri/i965/brw_meta_fast_clear.c | 8 ++++++--
 src/mesa/drivers/dri/i965/gen8_surface_state.c  | 8 --------
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
index f3c256d..499daba 100644
--- a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
+++ b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
@@ -359,8 +359,12 @@ is_color_fast_clear_compatible(struct brw_context *brw,
    }
 
    for (int i = 0; i < 4; i++) {
-      if (color->f[i] != 0.0f && color->f[i] != 1.0f &&
-          _mesa_format_has_color_component(format, i)) {
+      if (!_mesa_format_has_color_component(format, i)) {
+         continue;
+      }
+
+      if (brw->gen < 9 &&
+          color->f[i] != 0.0f && color->f[i] != 1.0f) {
          return false;
       }
    }
diff --git a/src/mesa/drivers/dri/i965/gen8_surface_state.c b/src/mesa/drivers/dri/i965/gen8_surface_state.c
index e81b646..9cdd1c7 100644
--- a/src/mesa/drivers/dri/i965/gen8_surface_state.c
+++ b/src/mesa/drivers/dri/i965/gen8_surface_state.c
@@ -188,14 +188,6 @@ gen8_emit_fast_clear_color(struct brw_context *brw,
                            uint32_t *surf)
 {
    if (brw->gen >= 9) {
-#define check_fast_clear_val(x) \
-      assert(mt->gen9_fast_clear_color.f[x] == 0.0 || \
-             mt->gen9_fast_clear_color.f[x] == 1.0)
-      check_fast_clear_val(0);
-      check_fast_clear_val(1);
-      check_fast_clear_val(2);
-      check_fast_clear_val(3);
-#undef check_fast_clear_val
       surf[12] = mt->gen9_fast_clear_color.ui[0];
       surf[13] = mt->gen9_fast_clear_color.ui[1];
       surf[14] = mt->gen9_fast_clear_color.ui[2];
-- 
2.6.2



More information about the mesa-dev mailing list