blorp: Allow reading with HiZ
authorJason Ekstrand <jason@jlekstrand.net>
Wed, 4 Dec 2019 02:29:15 +0000 (20:29 -0600)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 4 Jan 2020 20:25:54 +0000 (12:25 -0800)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/blorp/blorp_genX_exec.h
src/mesa/drivers/dri/i965/brw_blorp.c

index c1fc0892893c7779136d5c1f3d6dffabb7fbf644..348970a491bcb6ce1c94c4cbec74b165fe7e5dc5 100644 (file)
@@ -1356,8 +1356,12 @@ blorp_emit_surface_state(struct blorp_batch *batch,
       surf.dim = ISL_SURF_DIM_2D;
    }
 
-   /* Blorp doesn't support HiZ in any of the blit or slow-clear paths */
-   assert(!isl_aux_usage_has_hiz(surface->aux_usage));
+   if (isl_aux_usage_has_hiz(surface->aux_usage)) {
+      /* BLORP doesn't render with depth so we can't use HiZ */
+      assert(!is_render_target);
+      /* We can't reinterpret HiZ */
+      assert(surface->surf.format == surface->view.format);
+   }
    enum isl_aux_usage aux_usage = surface->aux_usage;
 
    isl_channel_mask_t write_disable_mask = 0;
index 0cc7922e6e51b0d3aaa14335dd93be2ea32ec893..873c1a6c1c808ca0b42a8fc0de8682acf7dc31dd 100644 (file)
@@ -299,6 +299,12 @@ brw_blorp_blit_miptrees(struct brw_context *brw,
        dst_level, dst_layer, dst_x0, dst_y0, dst_x1, dst_y1,
        mirror_x, mirror_y);
 
+   if (src_format == MESA_FORMAT_NONE)
+      src_format = src_mt->format;
+
+   if (dst_format == MESA_FORMAT_NONE)
+      dst_format = dst_mt->format;
+
    if (!decode_srgb)
       src_format = _mesa_get_srgb_format_linear(src_format);