mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02:00
tu: use pkt_field macros in tu_desc_{get,set}_addr()
Use pkt_field_{get_set}() macros in tu_desc_{get,set}_addr() functions,
aligning with other such functions.
The tu_desc_{get,set}_buffer_addr() functions are added in order to
correctly retrieve and modify the buffer address for TEX_BUFFER descriptors
on A8XX.
Signed-off-by: Zan Dobersek <zdobersek@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40538>
This commit is contained in:
parent
34e0d5c698
commit
139fced86f
2 changed files with 42 additions and 8 deletions
|
|
@ -4652,7 +4652,7 @@ tu_bind_descriptor_sets(struct tu_cmd_buffer *cmd,
|
|||
for (unsigned i = 0;
|
||||
i < binding->size / (4 * FDL6_TEX_CONST_DWORDS);
|
||||
i++, dst_desc += FDL6_TEX_CONST_DWORDS) {
|
||||
uint64_t va = tu_desc_get_addr<CHIP>(dst_desc);
|
||||
uint64_t va = tu_desc_get_buffer_addr<CHIP>(dst_desc);
|
||||
if (CHIP >= A8XX) {
|
||||
/* gen8 buffer descriptors take a byte address, and
|
||||
* the STARTOFFSETTEXELS field no longer exists.
|
||||
|
|
@ -4689,7 +4689,7 @@ tu_bind_descriptor_sets(struct tu_cmd_buffer *cmd,
|
|||
pkt_field_set(A6XX_TEX_MEMOBJ_2_STARTOFFSETTEXELS,
|
||||
dst_desc[2], new_offset);
|
||||
}
|
||||
tu_desc_set_addr<CHIP>(dst_desc, va);
|
||||
tu_desc_set_buffer_addr<CHIP>(dst_desc, va);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -449,9 +449,16 @@ template <chip CHIP>
|
|||
static inline uint64_t
|
||||
tu_desc_get_addr(uint32_t *desc)
|
||||
{
|
||||
const int idx = (CHIP >= A8XX) ? 0 : 4;
|
||||
uint64_t addr = desc[idx];
|
||||
addr |= (uint64_t)(desc[idx+1] & 0xffff) << 32;
|
||||
uint64_t addr = 0;
|
||||
|
||||
if (CHIP >= A8XX) {
|
||||
addr = pkt_field_get(A8XX_TEX_MEMOBJ_0_BASE_LO, desc[0]) << 6;
|
||||
addr |= (uint64_t)pkt_field_get(A8XX_TEX_MEMOBJ_1_BASE_HI, desc[1]) << 32;
|
||||
} else {
|
||||
addr = pkt_field_get(A6XX_TEX_MEMOBJ_4_BASE_LO, desc[4]) << 5;
|
||||
addr |= (uint64_t)pkt_field_get(A6XX_TEX_MEMOBJ_5_BASE_HI, desc[5]) << 32;
|
||||
}
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
|
|
@ -459,9 +466,36 @@ template <chip CHIP>
|
|||
static inline void
|
||||
tu_desc_set_addr(uint32_t *desc, uint64_t addr)
|
||||
{
|
||||
const int idx = (CHIP >= A8XX) ? 0 : 4;
|
||||
desc[idx] = addr;
|
||||
desc[idx+1] = (desc[idx+1] & ~0xffff) | addr >> 32;
|
||||
if (CHIP >= A8XX) {
|
||||
desc[0] = pkt_field_set(A8XX_TEX_MEMOBJ_0_BASE_LO, desc[0], addr);
|
||||
desc[1] = pkt_field_set(A8XX_TEX_MEMOBJ_1_BASE_HI, desc[1], addr >> 32);
|
||||
} else {
|
||||
desc[4] = pkt_field_set(A6XX_TEX_MEMOBJ_4_BASE_LO, desc[4], addr);
|
||||
desc[5] = pkt_field_set(A6XX_TEX_MEMOBJ_5_BASE_HI, desc[5], addr >> 32);
|
||||
}
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static inline uint64_t
|
||||
tu_desc_get_buffer_addr(uint32_t *desc)
|
||||
{
|
||||
if (CHIP < A8XX)
|
||||
return tu_desc_get_addr<CHIP>(desc);
|
||||
|
||||
uint64_t addr = pkt_field_get(A8XX_TEX_MEMOBJ_0_INSTANCE_DESC_BASE_LO, desc[0]);
|
||||
addr |= (uint64_t)pkt_field_get(A8XX_TEX_MEMOBJ_1_INSTANCE_DESC_BASE_HI, desc[1]) << 32;
|
||||
return addr;
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static inline void
|
||||
tu_desc_set_buffer_addr(uint32_t *desc, uint64_t addr)
|
||||
{
|
||||
if (CHIP < A8XX)
|
||||
return tu_desc_set_addr<CHIP>(desc, addr);
|
||||
|
||||
desc[0] = pkt_field_set(A8XX_TEX_MEMOBJ_0_INSTANCE_DESC_BASE_LO, desc[0], addr);
|
||||
desc[1] = pkt_field_set(A8XX_TEX_MEMOBJ_1_INSTANCE_DESC_BASE_HI, desc[1], addr >> 32);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue