Mesa (main): freedreno/fdl6: Add an interface for setting up buffer descriptors.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Nov 3 20:02:41 UTC 2021


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

Author: Emma Anholt <emma at anholt.net>
Date:   Tue Oct 19 11:42:47 2021 -0700

freedreno/fdl6: Add an interface for setting up buffer descriptors.

Buffers don't need all the layout stuff that image views do, so it's
easier to have a separate interface for generating them.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13635>

---

 src/freedreno/fdl/fd6_view.c         | 26 ++++++++++++++++++++++++++
 src/freedreno/fdl/freedreno_layout.h |  3 +++
 2 files changed, 29 insertions(+)

diff --git a/src/freedreno/fdl/fd6_view.c b/src/freedreno/fdl/fd6_view.c
index 5806b1682d4..37a46781ccf 100644
--- a/src/freedreno/fdl/fd6_view.c
+++ b/src/freedreno/fdl/fd6_view.c
@@ -344,3 +344,29 @@ fdl6_view_init(struct fdl6_view *view, const struct fdl_layout **layouts,
       A6XX_RB_BLIT_DST_INFO_COLOR_SWAP(color_swap) |
       COND(ubwc_enabled, A6XX_RB_BLIT_DST_INFO_FLAGS);
 }
+
+void
+fdl6_buffer_view_init(uint32_t *descriptor, enum pipe_format format,
+                      const uint8_t *swiz, uint64_t iova, uint32_t size)
+{
+   unsigned elements = size / util_format_get_blocksize(format);
+
+   struct fdl_view_args args = {
+      .format = format,
+      .swiz = {swiz[0], swiz[1], swiz[2], swiz[3]},
+   };
+
+   memset(descriptor, 0, 4 * FDL6_TEX_CONST_DWORDS);
+
+   descriptor[0] =
+      A6XX_TEX_CONST_0_TILE_MODE(TILE6_LINEAR) |
+      A6XX_TEX_CONST_0_SWAP(fd6_texture_swap(format, TILE6_LINEAR)) |
+      A6XX_TEX_CONST_0_FMT(fd6_texture_format(format, TILE6_LINEAR)) |
+      A6XX_TEX_CONST_0_MIPLVLS(0) | fdl6_texswiz(&args, false) |
+      COND(util_format_is_srgb(format), A6XX_TEX_CONST_0_SRGB);
+   descriptor[1] = A6XX_TEX_CONST_1_WIDTH(elements & ((1 << 15) - 1)) |
+                   A6XX_TEX_CONST_1_HEIGHT(elements >> 15);
+   descriptor[2] = A6XX_TEX_CONST_2_UNK4 | A6XX_TEX_CONST_2_UNK31;
+   descriptor[4] = iova;
+   descriptor[5] = iova >> 32;
+}
diff --git a/src/freedreno/fdl/freedreno_layout.h b/src/freedreno/fdl/freedreno_layout.h
index a53b9b97978..207aea04224 100644
--- a/src/freedreno/fdl/freedreno_layout.h
+++ b/src/freedreno/fdl/freedreno_layout.h
@@ -316,5 +316,8 @@ struct fdl6_view {
 void
 fdl6_view_init(struct fdl6_view *view, const struct fdl_layout **layouts,
                const struct fdl_view_args *args, bool has_z24uint_s8uint);
+void
+fdl6_buffer_view_init(uint32_t *descriptor, enum pipe_format format,
+                      const uint8_t *swiz, uint64_t iova, uint32_t size);
 
 #endif /* FREEDRENO_LAYOUT_H_ */



More information about the mesa-commit mailing list