freedreno/fdl: Support texel-aligned iova for buffer views

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20105>
This commit is contained in:
Connor Abbott 2022-12-01 12:16:39 +01:00 committed by Marge Bot
parent 3ca90405e8
commit 4d2aa9a9f7

View file

@ -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;
}