mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 18:50:10 +01:00
nir/builder: Add a load_system_value helper
While we're at it, go ahead and make nir_lower_clip use it. Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
ca5be008bc
commit
f6910f072a
2 changed files with 15 additions and 10 deletions
|
|
@ -322,4 +322,16 @@ nir_store_var(nir_builder *build, nir_variable *var, nir_ssa_def *value)
|
|||
nir_builder_instr_insert(build, &store->instr);
|
||||
}
|
||||
|
||||
static inline nir_ssa_def *
|
||||
nir_load_system_value(nir_builder *build, nir_intrinsic_op op, int index)
|
||||
{
|
||||
nir_intrinsic_instr *load = nir_intrinsic_instr_create(build->shader, op);
|
||||
load->num_components = nir_intrinsic_infos[op].dest_components;
|
||||
load->const_index[0] = index;
|
||||
nir_ssa_dest_init(&load->instr, &load->dest,
|
||||
nir_intrinsic_infos[op].dest_components, NULL);
|
||||
nir_builder_instr_insert(build, &load->instr);
|
||||
return &load->dest.ssa;
|
||||
}
|
||||
|
||||
#endif /* NIR_BUILDER_H */
|
||||
|
|
|
|||
|
|
@ -180,18 +180,11 @@ lower_clip_vs(nir_function_impl *impl, unsigned ucp_enables,
|
|||
|
||||
for (int plane = 0; plane < MAX_CLIP_PLANES; plane++) {
|
||||
if (ucp_enables & (1 << plane)) {
|
||||
nir_intrinsic_instr *ucp;
|
||||
|
||||
/* insert intrinsic to fetch ucp[plane]: */
|
||||
ucp = nir_intrinsic_instr_create(b.shader,
|
||||
nir_intrinsic_load_user_clip_plane);
|
||||
ucp->num_components = 4;
|
||||
ucp->const_index[0] = plane;
|
||||
nir_ssa_dest_init(&ucp->instr, &ucp->dest, 4, NULL);
|
||||
nir_builder_instr_insert(&b, &ucp->instr);
|
||||
nir_ssa_def *ucp =
|
||||
nir_load_system_value(&b, nir_intrinsic_load_user_clip_plane, plane);
|
||||
|
||||
/* calculate clipdist[plane] - dot(ucp, cv): */
|
||||
clipdist[plane] = nir_fdot4(&b, &ucp->dest.ssa, cv);
|
||||
clipdist[plane] = nir_fdot4(&b, ucp, cv);
|
||||
}
|
||||
else {
|
||||
/* 0.0 == don't-clip == disabled: */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue