mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-20 08:50:25 +01:00
pan/decode: Interpret LOAD_MULTIPLE opcode when decoding a command stream
This way we can support decoding of descriptors that are passed through context registers, which we will need for panvk, where the tiler/FB descriptors come from the VkQueue object, and are passed to command buffers. Of course, that means we can only see the latest version of such indirectly passed data, but that's already the case for most descriptors that are used several times in a command buffer anyway. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30695>
This commit is contained in:
parent
9e7091352c
commit
8b93d1dbbb
1 changed files with 16 additions and 0 deletions
|
|
@ -857,6 +857,22 @@ interpret_ceu_instr(struct pandecode_context *ctx, struct queue_ctx *qctx)
|
|||
break;
|
||||
}
|
||||
|
||||
case MALI_CS_OPCODE_LOAD_MULTIPLE: {
|
||||
pan_unpack(bytes, CS_LOAD_MULTIPLE, I);
|
||||
mali_ptr addr =
|
||||
((uint64_t)qctx->regs[I.address + 1] << 32) | qctx->regs[I.address];
|
||||
addr += I.offset;
|
||||
|
||||
uint32_t *src =
|
||||
pandecode_fetch_gpu_mem(ctx, addr, util_last_bit(I.mask) * 4);
|
||||
|
||||
for (uint32_t i = 0; i < 16; i++) {
|
||||
if (I.mask & BITFIELD_BIT(i))
|
||||
qctx->regs[I.base_register + i] = src[i];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case MALI_CS_OPCODE_ADD_IMMEDIATE32: {
|
||||
pan_unpack(bytes, CS_ADD_IMMEDIATE32, I);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue