v3d: Add VIR dumping of TMU config p0/p1.

I had a bit of it for V3D 3.x, but didn't update it for 4.x.
This commit is contained in:
Eric Anholt
2018-12-04 15:03:15 -08:00
parent 1fc78ff3f1
commit bad95bb13c
3 changed files with 33 additions and 14 deletions

View File

@@ -252,6 +252,21 @@ enum quniform_contents {
QUNIFORM_SPILL_SIZE_PER_THREAD, QUNIFORM_SPILL_SIZE_PER_THREAD,
}; };
static inline uint32_t v3d_tmu_config_data_create(uint32_t unit, uint32_t value)
{
return unit << 24 | value;
}
static inline uint32_t v3d_tmu_config_data_get_unit(uint32_t data)
{
return data >> 24;
}
static inline uint32_t v3d_tmu_config_data_get_value(uint32_t data)
{
return data & 0xffffff;
}
struct v3d_varying_slot { struct v3d_varying_slot {
uint8_t slot_and_component; uint8_t slot_and_component;
}; };

View File

@@ -103,6 +103,18 @@ vir_print_reg(struct v3d_compile *c, const struct qinst *inst,
fprintf(stderr, " (tex[%d].p1)", data); fprintf(stderr, " (tex[%d].p1)", data);
break; break;
case QUNIFORM_TMU_CONFIG_P0:
fprintf(stderr, " (tex[%d].p0 | 0x%x)",
v3d_tmu_config_data_get_unit(data),
v3d_tmu_config_data_get_value(data));
break;
case QUNIFORM_TMU_CONFIG_P1:
fprintf(stderr, " (tex[%d].p1 | 0x%x)",
v3d_tmu_config_data_get_unit(data),
v3d_tmu_config_data_get_value(data));
break;
case QUNIFORM_TEXTURE_WIDTH: case QUNIFORM_TEXTURE_WIDTH:
fprintf(stderr, " (tex[%d].width)", data); fprintf(stderr, " (tex[%d].width)", data);
break; break;

View File

@@ -148,17 +148,13 @@ write_tmu_p0(struct v3d_job *job,
struct v3d_texture_stateobj *texstate, struct v3d_texture_stateobj *texstate,
uint32_t data) uint32_t data)
{ {
/* Extract the texture unit from the top bits, and the compiler's int unit = v3d_tmu_config_data_get_unit(data);
* packed p0 from the bottom.
*/
uint32_t unit = data >> 24;
uint32_t p0 = data & 0x00ffffff;
struct pipe_sampler_view *psview = texstate->textures[unit]; struct pipe_sampler_view *psview = texstate->textures[unit];
struct v3d_sampler_view *sview = v3d_sampler_view(psview); struct v3d_sampler_view *sview = v3d_sampler_view(psview);
struct v3d_resource *rsc = v3d_resource(psview->texture); struct v3d_resource *rsc = v3d_resource(psview->texture);
cl_aligned_reloc(&job->indirect, uniforms, sview->bo, p0); cl_aligned_reloc(&job->indirect, uniforms, sview->bo,
v3d_tmu_config_data_get_value(data));
v3d_job_add_bo(job, rsc->bo); v3d_job_add_bo(job, rsc->bo);
} }
@@ -169,16 +165,12 @@ write_tmu_p1(struct v3d_job *job,
struct v3d_texture_stateobj *texstate, struct v3d_texture_stateobj *texstate,
uint32_t data) uint32_t data)
{ {
/* Extract the texture unit from the top bits, and the compiler's uint32_t unit = v3d_tmu_config_data_get_unit(data);
* packed p1 from the bottom.
*/
uint32_t unit = data >> 24;
uint32_t p0 = data & 0x00ffffff;
struct pipe_sampler_state *psampler = texstate->samplers[unit]; struct pipe_sampler_state *psampler = texstate->samplers[unit];
struct v3d_sampler_state *sampler = v3d_sampler_state(psampler); struct v3d_sampler_state *sampler = v3d_sampler_state(psampler);
cl_aligned_reloc(&job->indirect, uniforms, sampler->bo, p0); cl_aligned_reloc(&job->indirect, uniforms, sampler->bo,
v3d_tmu_config_data_get_value(data));
} }
struct v3d_cl_reloc struct v3d_cl_reloc