#include "v3d_decoder.h"
#include "v3d_packet_helpers.h"
#include "v3d_xml.h"
+#include "broadcom/clif/clif_private.h"
struct v3d_spec {
uint32_t ver;
}
void
-v3d_print_group(FILE *outfile, struct v3d_group *group,
+v3d_print_group(struct clif_dump *clif, struct v3d_group *group,
uint64_t offset, const uint8_t *p, bool color)
{
struct v3d_field_iterator iter;
v3d_field_iterator_init(&iter, group, p, color);
while (v3d_field_iterator_next(&iter)) {
- fprintf(outfile, " %s: %s\n", iter.name, iter.value);
+ fprintf(clif->out, " %s: %s\n", iter.name, iter.value);
if (iter.struct_desc) {
uint64_t struct_offset = offset + iter.offset;
- v3d_print_group(outfile, iter.struct_desc,
+ v3d_print_group(clif, iter.struct_desc,
struct_offset,
&p[iter.offset], color);
}
struct v3d_spec;
struct v3d_group;
struct v3d_field;
+struct clif_dump;
struct v3d_group *v3d_spec_find_struct(struct v3d_spec *spec, const char *name);
struct v3d_spec *v3d_spec_load(const struct v3d_device_info *devinfo);
bool v3d_field_iterator_next(struct v3d_field_iterator *iter);
-void v3d_print_group(FILE *out,
+void v3d_print_group(struct clif_dump *clif,
struct v3d_group *group,
uint64_t offset, const uint8_t *p,
bool color);
assert(attr);
out(clif, "GL Shader State Record at 0x%08x\n", reloc->addr);
- v3d_print_group(clif->out, state, 0, vaddr, "");
+ v3d_print_group(clif, state, 0, vaddr, "");
vaddr += v3d_group_get_length(state);
for (int i = 0; i < reloc->shader_state.num_attrs; i++) {
out(clif, " Attribute %d\n", i);
- v3d_print_group(clif->out, attr, 0, vaddr, "");
+ v3d_print_group(clif, attr, 0, vaddr, "");
vaddr += v3d_group_get_length(attr);
}
}
*size = v3d_group_get_length(inst);
out(clif, "%s\n", v3d_group_get_name(inst));
- v3d_print_group(clif->out, inst, 0, cl, "");
+ v3d_print_group(clif, inst, 0, cl, "");
switch (*cl) {
case V3DX(GL_SHADER_STATE_opcode): {
cl += *size;
for (int i = 0; i < values.number_of_16_bit_output_data_specs_following; i++) {
- v3d_print_group(clif->out, spec, 0, cl, "");
+ v3d_print_group(clif, spec, 0, cl, "");
cl += v3d_group_get_length(spec);
*size += v3d_group_get_length(spec);
}
cl += *size;
for (int i = 0; i < values.number_of_16_bit_output_data_specs_following; i++) {
- v3d_print_group(clif->out, spec, 0, cl, "");
+ v3d_print_group(clif, spec, 0, cl, "");
cl += v3d_group_get_length(spec);
*size += v3d_group_get_length(spec);
}
for (int i = 0; i < values.number_of_32_bit_output_buffer_address_following; i++) {
- v3d_print_group(clif->out, addr, 0, cl, "");
+ v3d_print_group(clif, addr, 0, cl, "");
cl += v3d_group_get_length(addr);
*size += v3d_group_get_length(addr);
}
#include "kernel/vc4_packet.h"
#include "broadcom/cle/v3d_decoder.h"
+#include "broadcom/clif/clif_dump.h"
void
vc4_dump_cl(void *cl, uint32_t size, bool is_render)
};
struct v3d_spec *spec = v3d_spec_load(&devinfo);
+ struct clif_dump *clif = clif_dump_init(&devinfo, stderr, NULL, NULL);
+
uint32_t offset = 0, hw_offset = 0;
uint8_t *p = cl;
fprintf(stderr, "0x%08x 0x%08x: 0x%02x %s\n",
offset, hw_offset, header, v3d_group_get_name(inst));
- v3d_print_group(stderr, inst, offset, p, "");
+ v3d_print_group(clif, inst, offset, p, "");
switch (header) {
case VC4_PACKET_HALT:
hw_offset += length;
p += length;
}
+
+ clif_dump_destroy(clif);
}