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:
committed by
Marge Bot
parent
9e7091352c
commit
8b93d1dbbb
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user