Commit 34898c8c authored by Eric Anholt's avatar Eric Anholt

broadcom/vc5: Add support for V3D 4.1 CLIF dumping.

parent 409696b7
noinst_LTLIBRARIES += libbroadcom.la
noinst_LTLIBRARIES += libbroadcom_v33.la
noinst_LTLIBRARIES += libbroadcom_v41.la
if USE_VC5_SIMULATOR
AM_CFLAGS += $(VC5_SIMULATOR_CFLAGS)
......@@ -9,6 +10,9 @@ endif
libbroadcom_v33_la_SOURCES = $(BROADCOM_PER_VERSION_SOURCES)
libbroadcom_v33_la_CFLAGS = -DV3D_VERSION=33
libbroadcom_v41_la_SOURCES = $(BROADCOM_PER_VERSION_SOURCES)
libbroadcom_v41_la_CFLAGS = -DV3D_VERSION=41
libbroadcom_la_SOURCES = $(BROADCOM_FILES)
check_PROGRAMS += \
......
......@@ -81,7 +81,10 @@ static bool
clif_dump_packet(struct clif_dump *clif, uint32_t offset, const uint8_t *cl,
uint32_t *size)
{
return v3d33_clif_dump_packet(clif, offset, cl, size);
if (clif->devinfo->ver >= 41)
return v3d41_clif_dump_packet(clif, offset, cl, size);
else
return v3d33_clif_dump_packet(clif, offset, cl, size);
}
static void
......@@ -133,8 +136,15 @@ clif_process_worklist(struct clif_dump *clif)
switch (reloc->type) {
case reloc_gl_shader_state:
v3d33_clif_dump_gl_shader_state_record(clif, reloc,
vaddr);
if (clif->devinfo->ver >= 41) {
v3d41_clif_dump_gl_shader_state_record(clif,
reloc,
vaddr);
} else {
v3d33_clif_dump_gl_shader_state_record(clif,
reloc,
vaddr);
}
break;
case reloc_generic_tile_list:
clif_dump_cl(clif, reloc->addr,
......
......@@ -72,6 +72,11 @@ bool v3d33_clif_dump_packet(struct clif_dump *clif, uint32_t offset,
void v3d33_clif_dump_gl_shader_state_record(struct clif_dump *clif,
struct reloc_worklist_entry *reloc,
void *vaddr);
bool v3d41_clif_dump_packet(struct clif_dump *clif, uint32_t offset,
const uint8_t *cl, uint32_t *size);
void v3d41_clif_dump_gl_shader_state_record(struct clif_dump *clif,
struct reloc_worklist_entry *reloc,
void *vaddr);
static inline void
out(struct clif_dump *clif, const char *fmt, ...)
......
......@@ -50,9 +50,9 @@ v3dX(clif_dump_packet)(struct clif_dump *clif, uint32_t offset,
v3d_print_group(clif->out, inst, 0, cl, "");
switch (*cl) {
case V3D33_GL_SHADER_STATE_opcode: {
struct V3D33_GL_SHADER_STATE values;
V3D33_GL_SHADER_STATE_unpack(cl, &values);
case V3DX(GL_SHADER_STATE_opcode): {
struct V3DX(GL_SHADER_STATE) values;
V3DX(GL_SHADER_STATE_unpack)(cl, &values);
struct reloc_worklist_entry *reloc =
clif_dump_add_address_to_worklist(clif,
......@@ -65,18 +65,38 @@ v3dX(clif_dump_packet)(struct clif_dump *clif, uint32_t offset,
return true;
}
case V3D33_STORE_MULTI_SAMPLE_RESOLVED_TILE_COLOR_BUFFER_EXTENDED_opcode: {
struct V3D33_STORE_MULTI_SAMPLE_RESOLVED_TILE_COLOR_BUFFER_EXTENDED values;
V3D33_STORE_MULTI_SAMPLE_RESOLVED_TILE_COLOR_BUFFER_EXTENDED_unpack(cl, &values);
#if V3D_VERSION < 40
case V3DX(STORE_MULTI_SAMPLE_RESOLVED_TILE_COLOR_BUFFER_EXTENDED_opcode): {
struct V3DX(STORE_MULTI_SAMPLE_RESOLVED_TILE_COLOR_BUFFER_EXTENDED) values;
V3DX(STORE_MULTI_SAMPLE_RESOLVED_TILE_COLOR_BUFFER_EXTENDED_unpack)(cl, &values);
if (values.last_tile_of_frame)
return false;
break;
}
#endif /* V3D_VERSION < 40 */
case V3D33_TRANSFORM_FEEDBACK_ENABLE_opcode: {
struct V3D33_TRANSFORM_FEEDBACK_ENABLE values;
V3D33_TRANSFORM_FEEDBACK_ENABLE_unpack(cl, &values);
#if V3D_VERSION > 40
case V3DX(TRANSFORM_FEEDBACK_SPECS_opcode): {
struct V3DX(TRANSFORM_FEEDBACK_SPECS) values;
V3DX(TRANSFORM_FEEDBACK_SPECS_unpack)(cl, &values);
struct v3d_group *spec = v3d_spec_find_struct(clif->spec,
"Transform Feedback Output Data Spec");
assert(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, "");
cl += v3d_group_get_length(spec);
*size += v3d_group_get_length(spec);
}
break;
}
#else /* V3D_VERSION < 40 */
case V3DX(TRANSFORM_FEEDBACK_ENABLE_opcode): {
struct V3DX(TRANSFORM_FEEDBACK_ENABLE) values;
V3DX(TRANSFORM_FEEDBACK_ENABLE_unpack)(cl, &values);
struct v3d_group *spec = v3d_spec_find_struct(clif->spec,
"Transform Feedback Output Data Spec");
struct v3d_group *addr = v3d_spec_find_struct(clif->spec,
......@@ -99,10 +119,11 @@ v3dX(clif_dump_packet)(struct clif_dump *clif, uint32_t offset,
}
break;
}
#endif /* V3D_VERSION < 40 */
case V3D33_START_ADDRESS_OF_GENERIC_TILE_LIST_opcode: {
struct V3D33_START_ADDRESS_OF_GENERIC_TILE_LIST values;
V3D33_START_ADDRESS_OF_GENERIC_TILE_LIST_unpack(cl, &values);
case V3DX(START_ADDRESS_OF_GENERIC_TILE_LIST_opcode): {
struct V3DX(START_ADDRESS_OF_GENERIC_TILE_LIST) values;
V3DX(START_ADDRESS_OF_GENERIC_TILE_LIST_unpack)(cl, &values);
struct reloc_worklist_entry *reloc =
clif_dump_add_address_to_worklist(clif,
reloc_generic_tile_list,
......@@ -111,7 +132,7 @@ v3dX(clif_dump_packet)(struct clif_dump *clif, uint32_t offset,
break;
}
case V3D33_HALT_opcode:
case V3DX(HALT_opcode):
return false;
}
......
......@@ -22,7 +22,7 @@ inc_broadcom = include_directories('.', 'cle')
subdir('cle')
vc5_versions = ['33']
vc5_versions = ['33', '41']
if with_gallium_vc5
subdir('compiler')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment