diff --git a/src/asahi/lib/cmdbuf.xml b/src/asahi/lib/cmdbuf.xml index 220e85b40d6..4fc4e0519cb 100644 --- a/src/asahi/lib/cmdbuf.xml +++ b/src/asahi/lib/cmdbuf.xml @@ -161,7 +161,7 @@ - + @@ -197,8 +197,7 @@ - - + diff --git a/src/asahi/lib/decode.c b/src/asahi/lib/decode.c index 47be2398ac9..d84029d41aa 100644 --- a/src/asahi/lib/decode.c +++ b/src/asahi/lib/decode.c @@ -359,21 +359,30 @@ agxdecode_pipeline(const uint8_t *map, UNUSED bool verbose) agx_unpack(agxdecode_dump_stream, map, BIND_TEXTURE, temp); DUMP_UNPACKED(BIND_TEXTURE, temp, "Bind texture\n"); - uint8_t *tex = agxdecode_fetch_gpu_mem(temp.buffer, 64); - /* Texture length seen to be <= 0x18 bytes, samplers only need 8 byte - * alignment */ - agx_unpack(agxdecode_dump_stream, tex, TEXTURE, t); - DUMP_CL(TEXTURE, tex, "Texture"); - DUMP_CL(RENDER_TARGET, tex, "Render target"); + uint8_t *tex = agxdecode_fetch_gpu_mem(temp.buffer, + AGX_TEXTURE_LENGTH * temp.count); + + /* Note: samplers only need 8 byte alignment? */ + for (unsigned i = 0; i < temp.count; ++i) { + agx_unpack(agxdecode_dump_stream, tex, TEXTURE, t); + DUMP_CL(TEXTURE, tex, "Texture"); + DUMP_CL(RENDER_TARGET, tex, "Render target"); + + tex += AGX_TEXTURE_LENGTH; + } return AGX_BIND_TEXTURE_LENGTH; } else if (map[0] == 0x9D) { agx_unpack(agxdecode_dump_stream, map, BIND_SAMPLER, temp); DUMP_UNPACKED(BIND_SAMPLER, temp, "Bind sampler\n"); - uint8_t *samp = agxdecode_fetch_gpu_mem(temp.buffer, 64); - DUMP_CL(SAMPLER, samp, "Sampler"); - hexdump(agxdecode_dump_stream, samp + AGX_SAMPLER_LENGTH, 64 - AGX_SAMPLER_LENGTH, false); + uint8_t *samp = agxdecode_fetch_gpu_mem(temp.buffer, + AGX_SAMPLER_LENGTH * temp.count); + + for (unsigned i = 0; i < temp.count; ++i) { + DUMP_CL(SAMPLER, samp, "Sampler"); + samp += AGX_SAMPLER_LENGTH; + } return AGX_BIND_SAMPLER_LENGTH; } else if (map[0] == 0x1D) {