From 4d2aa9a9f7d6a20a3c4409e81023c088d8ce1c81 Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Thu, 1 Dec 2022 12:16:39 +0100 Subject: [PATCH] freedreno/fdl: Support texel-aligned iova for buffer views Part-of: --- src/freedreno/fdl/fd6_view.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/freedreno/fdl/fd6_view.c b/src/freedreno/fdl/fd6_view.c index b8236a75324..1e22b0d710a 100644 --- a/src/freedreno/fdl/fd6_view.c +++ b/src/freedreno/fdl/fd6_view.c @@ -432,7 +432,10 @@ 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); + unsigned elem_size = util_format_get_blocksize(format); + unsigned elements = size / elem_size; + uint64_t base_iova = iova & ~0x3full; + unsigned texel_offset = (iova & 0x3f) / elem_size; struct fdl_view_args args = { .format = format, @@ -450,7 +453,8 @@ fdl6_buffer_view_init(uint32_t *descriptor, enum pipe_format format, descriptor[1] = A6XX_TEX_CONST_1_WIDTH(elements & ((1 << 15) - 1)) | A6XX_TEX_CONST_1_HEIGHT(elements >> 15); descriptor[2] = A6XX_TEX_CONST_2_STRUCTSIZETEXELS(1) | + A6XX_TEX_CONST_2_STARTOFFSETTEXELS(texel_offset) | A6XX_TEX_CONST_2_TYPE(A6XX_TEX_BUFFER); - descriptor[4] = iova; - descriptor[5] = iova >> 32; + descriptor[4] = base_iova; + descriptor[5] = base_iova >> 32; }