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

Ben Widawsky benjamin.widawsky at intel.com
Tue Oct 13 20:50:27 PDT 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).

This is enabled separate because it is a new feature to SKL and so it might have
some issues.

NOTE: This patch has 2 regressions with 16F_LUMINANCE and 16F_INTENSITY which
needs to be resolved before merging. The rest of the test suites are happy.
./bin/ext_framebuffer_multisample-formats [2468]
...
Testing GL_LUMINANCE16F_ARB
Probe at (0,0)
  Expected: 0.000000
  Observed: 0.500000
Probe at (0,0)
  Expected: 0.000000
  Observed: 0.500000

Not-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 9c51ffb..aa36794 100644
--- a/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
+++ b/src/mesa/drivers/dri/i965/brw_meta_fast_clear.c
@@ -360,8 +360,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 b19b492..ca0cedc 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.1



More information about the mesa-dev mailing list