Mesa (main): radv: add support for more HTILE clear codes

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jul 2 15:35:30 UTC 2021


Module: Mesa
Branch: main
Commit: 0cfeb937517399c502d669c7545c51ac775ebb8b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0cfeb937517399c502d669c7545c51ac775ebb8b

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Mon Apr  5 14:18:27 2021 +0200

radv: add support for more HTILE clear codes

The HTILE clear code is now computed based on the floating point value.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10035>

---

 src/amd/vulkan/radv_meta_clear.c | 47 ++++++++++++++++++++++++++++++++++------
 1 file changed, 40 insertions(+), 7 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c
index 2298bc0a4ad..a9369b2ee80 100644
--- a/src/amd/vulkan/radv_meta_clear.c
+++ b/src/amd/vulkan/radv_meta_clear.c
@@ -868,19 +868,52 @@ static uint32_t
 radv_get_htile_fast_clear_value(const struct radv_device *device, const struct radv_image *image,
                                 VkClearDepthStencilValue value)
 {
-   uint32_t clear_value;
+   uint32_t max_zval = 0x3fff; /* maximum 14-bit value. */
+   uint32_t zmask = 0, smem = 0;
+   uint32_t htile_value;
+   uint32_t zmin, zmax;
+
+   /* Convert the depth value to 14-bit zmin/zmax values. */
+   zmin = ((value.depth * max_zval) + 0.5f);
+   zmax = zmin;
 
    if (radv_image_tile_stencil_disabled(device, image)) {
-      clear_value = value.depth ? 0xfffffff0 : 0;
+      /* Z only (no stencil):
+       *
+       * |31     18|17      4|3     0|
+       * +---------+---------+-------+
+       * |  Max Z  |  Min Z  | ZMask |
+       */
+      htile_value = (((zmax  & 0x3fff) << 18) |
+                     ((zmin  & 0x3fff) <<  4) |
+                     ((zmask &    0xf) <<  0));
    } else {
+
+      /* Z and stencil:
+       *
+       * |31       12|11 10|9    8|7   6|5   4|3     0|
+       * +-----------+-----+------+-----+-----+-------+
+       * |  Z Range  |     | SMem | SR1 | SR0 | ZMask |
+       *
+       * Z, stencil, 4 bit VRS encoding:
+       * |31       12| 11      10 |9    8|7         6 |5   4|3     0|
+       * +-----------+------------+------+------------+-----+-------+
+       * |  Z Range  | VRS Y-rate | SMem | VRS X-rate | SR0 | ZMask |
+       */
+      uint32_t delta = 0;
+      uint32_t zrange = ((zmax << 6) | delta);
+      uint32_t sresults = 0xf; /* SR0/SR1 both as 0x3. */
+
       if (radv_image_has_vrs_htile(device, image))
-         clear_value = value.depth ? 0xfffc0030 : 0x30;
-      else {
-         clear_value = value.depth ? 0xfffc00f0 : 0xf0;
-      }
+         sresults = 0x3;
+
+      htile_value = (((zrange   & 0xfffff) << 12) |
+                     ((smem     & 0x3)     <<  8) |
+                     ((sresults & 0xf)     <<  4) |
+                     ((zmask    & 0xf)     <<  0));
    }
 
-   return clear_value;
+   return htile_value;
 }
 
 static uint32_t



More information about the mesa-commit mailing list