Module: Mesa Branch: main Commit: aa3074e5be4dc3fff51e1359fb21e00cf26031b7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=aa3074e5be4dc3fff51e1359fb21e00cf26031b7
Author: Emma Anholt <[email protected]> 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_ */
