agx: Add stack adjust opcode
Signed-off-by: Mary Guillemard <mary@mary.zone> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26056>
This commit is contained in:
committed by
Marge Bot
parent
588fd6dfd6
commit
a5cdc86da0
@@ -290,6 +290,7 @@ typedef struct {
|
||||
uint32_t bfi_mask;
|
||||
uint16_t pixel_offset;
|
||||
uint16_t zs;
|
||||
int16_t stack_size;
|
||||
enum agx_sr sr;
|
||||
enum agx_round round;
|
||||
enum agx_atomic_opc atomic_opc;
|
||||
|
||||
@@ -80,6 +80,7 @@ MASK = immediate("mask")
|
||||
BFI_MASK = immediate("bfi_mask")
|
||||
LOD_MODE = immediate("lod_mode", "enum agx_lod_mode")
|
||||
PIXEL_OFFSET = immediate("pixel_offset")
|
||||
STACK_SIZE = immediate("stack_size", 'int16_t')
|
||||
|
||||
DIM = enum("dim", {
|
||||
0: '1d',
|
||||
@@ -427,6 +428,11 @@ op("doorbell", (0x60020 | 0x28 << 32, (1 << 48) - 1, 6, _), dests = 0,
|
||||
op("stack_unmap", (0x00075, (1 << 24) - 1, 8, _), dests = 1, srcs = 0, can_eliminate = False, can_reorder = False, imms = [IMM])
|
||||
op("stack_map", (0x10075, (1 << 24) - 1, 8, _), dests = 0, srcs = 1, can_eliminate = False, can_reorder = False, imms = [IMM])
|
||||
|
||||
op("stack_adjust",
|
||||
encoding_32 = (0x10100b5, (1 << 26) - 1, 8, _),
|
||||
dests = 0, srcs = 0, can_eliminate = False, can_reorder = False,
|
||||
imms = [STACK_SIZE], schedule_class = "store")
|
||||
|
||||
# source is offset
|
||||
op("stack_load",
|
||||
encoding_32 = (0x35, (1 << 20) - 1, 6, 8),
|
||||
|
||||
@@ -1039,6 +1039,25 @@ agx_pack_instr(struct util_dynarray *emission, struct util_dynarray *fixups,
|
||||
memcpy(util_dynarray_grow_bytes(emission, 1, size), &raw, size);
|
||||
break;
|
||||
}
|
||||
case AGX_OPCODE_STACK_ADJUST: {
|
||||
struct agx_opcode_info info = agx_opcodes_info[I->op];
|
||||
|
||||
unsigned i0 = 0; // XXX
|
||||
unsigned i1 = 1; // XXX
|
||||
unsigned i2 = 2; // XXX
|
||||
unsigned i3 = 0; // XXX
|
||||
unsigned i4 = 0; // XXX
|
||||
|
||||
uint64_t raw =
|
||||
info.encoding.exact | ((uint64_t)i0 << 8) | ((uint64_t)i1 << 26) |
|
||||
((uint64_t)i2 << 36) | ((uint64_t)i3 << 44) | ((uint64_t)i4 << 50) |
|
||||
((I->stack_size & 0xF) << 20) |
|
||||
((uint64_t)((I->stack_size >> 4) & 0xF) << 32) | (1UL << 47) | // XXX
|
||||
((uint64_t)(I->stack_size >> 8) << 56);
|
||||
|
||||
memcpy(util_dynarray_grow_bytes(emission, 1, 8), &raw, 8);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
agx_pack_alu(emission, I);
|
||||
|
||||
Reference in New Issue
Block a user