From 788e94294f160fd9ba2b2d5b5ed84ca8c4a63ad1 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 30 Jan 2023 20:11:50 -0600 Subject: [PATCH] nil: Add a helper for filling out buffer TIC entries Part-of: --- src/nouveau/nil/nil_image.h | 6 ++++++ src/nouveau/nil/nil_image_tic.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/nouveau/nil/nil_image.h b/src/nouveau/nil/nil_image.h index 69573954073..6acb8fc3d7a 100644 --- a/src/nouveau/nil/nil_image.h +++ b/src/nouveau/nil/nil_image.h @@ -161,4 +161,10 @@ void nil_image_fill_tic(struct nouveau_ws_device *dev, uint64_t base_address, void *desc_out); +void nil_buffer_fill_tic(struct nouveau_ws_device *dev, + uint64_t base_address, + enum pipe_format format, + uint32_t num_elements, + void *desc_out); + #endif /* NIL_H */ diff --git a/src/nouveau/nil/nil_image_tic.c b/src/nouveau/nil/nil_image_tic.c index e1a1336d4dd..2fbd0d78cb4 100644 --- a/src/nouveau/nil/nil_image_tic.c +++ b/src/nouveau/nil/nil_image_tic.c @@ -172,3 +172,34 @@ nil_image_fill_tic(struct nouveau_ws_device *dev, memcpy(desc_out, tic, sizeof(tic)); } + +void +nil_buffer_fill_tic(struct nouveau_ws_device *dev, + uint64_t base_address, + enum pipe_format format, + uint32_t num_elements, + void *desc_out) +{ + static const enum pipe_swizzle identity_swizzle[4] = { + PIPE_SWIZZLE_X, + PIPE_SWIZZLE_Y, + PIPE_SWIZZLE_Z, + PIPE_SWIZZLE_W, + }; + uint32_t tic[8] = { }; + + assert(!util_format_is_compressed(format)); + tic[0] |= gm107_tic2_0_format(format, identity_swizzle); + tic[1] |= base_address; + tic[2] |= base_address >> 32; + tic[2] |= GM107_TIC2_2_HEADER_VERSION_ONE_D_BUFFER; + tic[3] |= (num_elements - 1) >> 16; + tic[4] |= (num_elements - 1) & 0xffff; + tic[4] |= GM107_TIC2_4_TEXTURE_TYPE_ONE_D_BUFFER; + + /* TODO: Do we need these two? */ + tic[4] |= GM107_TIC2_4_SECTOR_PROMOTION_PROMOTE_TO_2_V; + tic[4] |= GM107_TIC2_4_BORDER_SIZE_SAMPLER_COLOR; + + memcpy(desc_out, tic, sizeof(tic)); +}