summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/broadcom/compiler/v3d_compiler.h15
-rw-r--r--src/broadcom/compiler/vir_dump.c12
-rw-r--r--src/gallium/drivers/v3d/v3d_uniforms.c20
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