diff options
-rw-r--r-- | src/broadcom/compiler/v3d_compiler.h | 15 | ||||
-rw-r--r-- | src/broadcom/compiler/vir_dump.c | 12 | ||||
-rw-r--r-- | src/gallium/drivers/v3d/v3d_uniforms.c | 20 |
3 files changed, 33 insertions, 14 deletions
diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h index bed5b588e0d..6ab1176068d 100644 --- a/src/broadcom/compiler/v3d_compiler.h +++ b/src/broadcom/compiler/v3d_compiler.h @@ -252,6 +252,21 @@ enum quniform_contents { 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 { uint8_t slot_and_component; }; diff --git a/src/broadcom/compiler/vir_dump.c b/src/broadcom/compiler/vir_dump.c index f02413c6877..d1c343f773e 100644 --- a/src/broadcom/compiler/vir_dump.c +++ b/src/broadcom/compiler/vir_dump.c @@ -103,6 +103,18 @@ vir_print_reg(struct v3d_compile *c, const struct qinst *inst, fprintf(stderr, " (tex[%d].p1)", data); 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: fprintf(stderr, " (tex[%d].width)", data); break; diff --git a/src/gallium/drivers/v3d/v3d_uniforms.c b/src/gallium/drivers/v3d/v3d_uniforms.c index 6d927deeec5..49e83ccdb1d 100644 --- a/src/gallium/drivers/v3d/v3d_uniforms.c +++ b/src/gallium/drivers/v3d/v3d_uniforms.c @@ -148,17 +148,13 @@ write_tmu_p0(struct v3d_job *job, struct v3d_texture_stateobj *texstate, uint32_t data) { - /* Extract the texture unit from the top bits, and the compiler's - * packed p0 from the bottom. - */ - uint32_t unit = data >> 24; - uint32_t p0 = data & 0x00ffffff; - + int unit = v3d_tmu_config_data_get_unit(data); struct pipe_sampler_view *psview = texstate->textures[unit]; struct v3d_sampler_view *sview = v3d_sampler_view(psview); 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); } @@ -169,16 +165,12 @@ write_tmu_p1(struct v3d_job *job, struct v3d_texture_stateobj *texstate, uint32_t data) { - /* Extract the texture unit from the top bits, and the compiler's - * packed p1 from the bottom. - */ - uint32_t unit = data >> 24; - uint32_t p0 = data & 0x00ffffff; - + uint32_t unit = v3d_tmu_config_data_get_unit(data); struct pipe_sampler_state *psampler = texstate->samplers[unit]; 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 |