nir: add nir_intrinsic_load_barycentric_model
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3578>
This commit is contained in:

committed by
Marge Bot

parent
df8dd12e5b
commit
9021b45b35
@@ -1250,8 +1250,9 @@ static inline nir_ssa_def *
|
||||
nir_load_barycentric(nir_builder *build, nir_intrinsic_op op,
|
||||
unsigned interp_mode)
|
||||
{
|
||||
unsigned num_components = op == nir_intrinsic_load_barycentric_model ? 3 : 2;
|
||||
nir_intrinsic_instr *bary = nir_intrinsic_instr_create(build->shader, op);
|
||||
nir_ssa_dest_init(&bary->instr, &bary->dest, 2, 32, NULL);
|
||||
nir_ssa_dest_init(&bary->instr, &bary->dest, num_components, 32, NULL);
|
||||
nir_intrinsic_set_interp_mode(bary, interp_mode);
|
||||
nir_builder_instr_insert(build, &bary->instr);
|
||||
return &bary->dest.ssa;
|
||||
|
@@ -646,9 +646,10 @@ system_value("user_data_amd", 4)
|
||||
# Barycentric coordinate intrinsics.
|
||||
#
|
||||
# These set up the barycentric coordinates for a particular interpolation.
|
||||
# The first three are for the simple cases: pixel, centroid, or per-sample
|
||||
# (at gl_SampleID). The next two handle interpolating at a specified
|
||||
# sample location, or interpolating with a vec2 offset,
|
||||
# The first four are for the simple cases: pixel, centroid, per-sample
|
||||
# (at gl_SampleID), or pull model (1/W, 1/I, 1/J) at the pixel center. The next
|
||||
# three two handle interpolating at a specified sample location, or
|
||||
# interpolating with a vec2 offset,
|
||||
#
|
||||
# The interp_mode index should be either the INTERP_MODE_SMOOTH or
|
||||
# INTERP_MODE_NOPERSPECTIVE enum values.
|
||||
@@ -656,18 +657,19 @@ system_value("user_data_amd", 4)
|
||||
# The vec2 value produced by these intrinsics is intended for use as the
|
||||
# barycoord source of a load_interpolated_input intrinsic.
|
||||
|
||||
def barycentric(name, src_comp=[]):
|
||||
intrinsic("load_barycentric_" + name, src_comp=src_comp, dest_comp=2,
|
||||
def barycentric(name, dst_comp, src_comp=[]):
|
||||
intrinsic("load_barycentric_" + name, src_comp=src_comp, dest_comp=dst_comp,
|
||||
indices=[INTERP_MODE], flags=[CAN_ELIMINATE, CAN_REORDER])
|
||||
|
||||
# no sources.
|
||||
barycentric("pixel")
|
||||
barycentric("centroid")
|
||||
barycentric("sample")
|
||||
barycentric("pixel", 2)
|
||||
barycentric("centroid", 2)
|
||||
barycentric("sample", 2)
|
||||
barycentric("model", 3)
|
||||
# src[] = { sample_id }.
|
||||
barycentric("at_sample", [1])
|
||||
barycentric("at_sample", 2, [1])
|
||||
# src[] = { offset.xy }.
|
||||
barycentric("at_offset", [2])
|
||||
barycentric("at_offset", 2, [2])
|
||||
|
||||
# Load sample position:
|
||||
#
|
||||
|
Reference in New Issue
Block a user