[Mesa-dev] [PATCH 2/9] ir3/compiler: Handle newly added intrinsic image_deref_load_param_ir3
Eduardo Lima Mitev
elima at igalia.com
Wed Feb 13 21:29:49 UTC 2019
Compiler will emit an uniform value corresponding to the requested
parameter (bpp, y-stride or z-stride) for the dereferenced image.
---
src/freedreno/ir3/ir3_compiler_nir.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c
index fd641735620..df948995000 100644
--- a/src/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/freedreno/ir3/ir3_compiler_nir.c
@@ -1719,6 +1719,24 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
case nir_intrinsic_image_deref_atomic_comp_swap:
dst[0] = emit_intrinsic_atomic_image(ctx, intr);
break;
+ case nir_intrinsic_image_deref_load_param_ir3: {
+ const nir_variable *var = nir_intrinsic_get_var(intr, 0);
+ compile_assert(ctx, var);
+ idx = var->data.driver_location;
+
+ /* this is the index into image_dims offsets, which can take
+ * values 0, 1 or 2 (bpp, y-stride, z-stride respectively).
+ */
+ uint8_t off = intr->const_index[0];
+ compile_assert(ctx, off <= 2);
+
+ unsigned cb = regid(ctx->so->constbase.image_dims, 0) +
+ ctx->so->const_layout.image_dims.off[idx];
+ compile_assert(ctx, ctx->so->const_layout.image_dims.mask & (1 << idx));
+
+ dst[0] = create_uniform(b, cb + off);
+ break;
+ }
case nir_intrinsic_barrier:
case nir_intrinsic_memory_barrier:
case nir_intrinsic_group_memory_barrier:
--
2.20.1
More information about the mesa-dev
mailing list