nir: Add a common gen_rect_vertices implementation
Signed-off-by: Konstantin Seurer <konstantin.seurer@gmail.com> Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17535>
This commit is contained in:
parent
203afc9351
commit
fab0050223
|
@ -448,3 +448,40 @@ nir_type_convert(nir_builder *b,
|
||||||
|
|
||||||
return nir_build_alu(b, opcode, src, NULL, NULL, NULL);
|
return nir_build_alu(b, opcode, src, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nir_ssa_def *
|
||||||
|
nir_gen_rect_vertices(nir_builder *b, nir_ssa_def *z, nir_ssa_def *w)
|
||||||
|
{
|
||||||
|
if (!z)
|
||||||
|
z = nir_imm_float(b, 0.0);
|
||||||
|
if (!w)
|
||||||
|
w = nir_imm_float(b, 1.0);
|
||||||
|
|
||||||
|
nir_ssa_def *vertex_id;
|
||||||
|
if (b->shader->options->vertex_id_zero_based)
|
||||||
|
vertex_id = nir_load_vertex_id_zero_base(b);
|
||||||
|
else
|
||||||
|
vertex_id = nir_load_vertex_id(b);
|
||||||
|
|
||||||
|
/* vertex 0: -1.0, -1.0
|
||||||
|
* vertex 1: -1.0, 1.0
|
||||||
|
* vertex 2: 1.0, -1.0
|
||||||
|
* vertex 3: 1.0, 1.0
|
||||||
|
*
|
||||||
|
* so:
|
||||||
|
*
|
||||||
|
* channel 0 is vertex_id < 2 ? -1.0 : 1.0
|
||||||
|
* channel 1 is vertex_id & 1 ? 1.0 : -1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
nir_ssa_def *c0cmp = nir_ilt(b, vertex_id, nir_imm_int(b, 2));
|
||||||
|
nir_ssa_def *c1cmp = nir_test_mask(b, vertex_id, 1);
|
||||||
|
|
||||||
|
nir_ssa_def *comp[4];
|
||||||
|
comp[0] = nir_bcsel(b, c0cmp, nir_imm_float(b, -1.0), nir_imm_float(b, 1.0));
|
||||||
|
comp[1] = nir_bcsel(b, c1cmp, nir_imm_float(b, 1.0), nir_imm_float(b, -1.0));
|
||||||
|
comp[2] = z;
|
||||||
|
comp[3] = w;
|
||||||
|
|
||||||
|
return nir_vec(b, comp, 4);
|
||||||
|
}
|
||||||
|
|
|
@ -1716,6 +1716,9 @@ nir_f2iN(nir_builder *b, nir_ssa_def *src, unsigned bit_size)
|
||||||
(nir_alu_type) (nir_type_int | bit_size));
|
(nir_alu_type) (nir_type_int | bit_size));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nir_ssa_def *
|
||||||
|
nir_gen_rect_vertices(nir_builder *b, nir_ssa_def *z, nir_ssa_def *w);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue