nir/builder: Add a helper for grabbing multiple channels from an ssa def
This is similar to nir_channel except that it lets you grab more than one channel by providing a mask. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -324,6 +324,20 @@ nir_channel(nir_builder *b, nir_ssa_def *def, unsigned c)
|
|||||||
return nir_swizzle(b, def, swizzle, 1, false);
|
return nir_swizzle(b, def, swizzle, 1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline nir_ssa_def *
|
||||||
|
nir_channels(nir_builder *b, nir_ssa_def *def, unsigned mask)
|
||||||
|
{
|
||||||
|
unsigned num_channels = 0, swizzle[4] = { 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < 4; i++) {
|
||||||
|
if ((mask & (1 << i)) == 0)
|
||||||
|
continue;
|
||||||
|
swizzle[num_channels++] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nir_swizzle(b, def, swizzle, num_channels, false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Turns a nir_src into a nir_ssa_def * so it can be passed to
|
* Turns a nir_src into a nir_ssa_def * so it can be passed to
|
||||||
* nir_build_alu()-based builder calls.
|
* nir_build_alu()-based builder calls.
|
||||||
|
@@ -1010,9 +1010,7 @@ build_nir_w_tiled_fragment_shader(struct anv_device *device,
|
|||||||
discard->src[0] = nir_src_for_ssa(oob);
|
discard->src[0] = nir_src_for_ssa(oob);
|
||||||
nir_builder_instr_insert(&b, &discard->instr);
|
nir_builder_instr_insert(&b, &discard->instr);
|
||||||
|
|
||||||
unsigned swiz[4] = { 0, 1, 0, 0 };
|
nir_ssa_def *tex_off = nir_channels(&b, nir_load_var(&b, tex_off_in), 0x3);
|
||||||
nir_ssa_def *tex_off =
|
|
||||||
nir_swizzle(&b, nir_load_var(&b, tex_off_in), swiz, 2, false);
|
|
||||||
nir_ssa_def *tex_pos = nir_iadd(&b, nir_vec2(&b, x_W, y_W), tex_off);
|
nir_ssa_def *tex_pos = nir_iadd(&b, nir_vec2(&b, x_W, y_W), tex_off);
|
||||||
nir_ssa_def *tex_pitch = nir_channel(&b, nir_load_var(&b, tex_off_in), 2);
|
nir_ssa_def *tex_pitch = nir_channel(&b, nir_load_var(&b, tex_off_in), 2);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user