From: Jonathan Marek Date: Mon, 7 Oct 2019 20:21:52 +0000 (-0400) Subject: freedreno/ir3: implement texop_texture_samples X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=92d756f22de2f2653dc39bdd1af33cd89fce34af;p=mesa.git freedreno/ir3: implement texop_texture_samples Signed-off-by: Jonathan Marek Reviewed-by: Rob Clark --- diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c index 38dad5c7e49..0ddf4d34130 100644 --- a/src/freedreno/ir3/ir3_compiler_nir.c +++ b/src/freedreno/ir3/ir3_compiler_nir.c @@ -1979,20 +1979,21 @@ emit_tex(struct ir3_context *ctx, nir_tex_instr *tex) } static void -emit_tex_query_levels(struct ir3_context *ctx, nir_tex_instr *tex) +emit_tex_info(struct ir3_context *ctx, nir_tex_instr *tex, unsigned idx) { struct ir3_block *b = ctx->block; struct ir3_instruction **dst, *sam; dst = ir3_get_dst(ctx, &tex->dest, 1); - sam = ir3_SAM(b, OPC_GETINFO, TYPE_U32, 0b0100, 0, + sam = ir3_SAM(b, OPC_GETINFO, TYPE_U32, 1 << idx, 0, get_tex_samp_tex_src(ctx, tex), NULL, NULL); /* even though there is only one component, since it ends - * up in .z rather than .x, we need a split_dest() + * up in .y/.z/.w rather than .x, we need a split_dest() */ - ir3_split_dest(b, dst, sam, 0, 3); + if (idx) + ir3_split_dest(b, dst, sam, 0, idx + 1); /* The # of levels comes from getinfo.z. We need to add 1 to it, since * the value in TEX_CONST_0 is zero-based. @@ -2093,7 +2094,10 @@ emit_instr(struct ir3_context *ctx, nir_instr *instr) emit_tex_txs(ctx, tex); break; case nir_texop_query_levels: - emit_tex_query_levels(ctx, tex); + emit_tex_info(ctx, tex, 2); + break; + case nir_texop_texture_samples: + emit_tex_info(ctx, tex, 3); break; default: emit_tex(ctx, tex);