nir: Promote tess_coord_r600 to tess_coord_xy

This intrinsic (vec2 tess_coord) is generally useful for non-r600 backends.
Promote it.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24159>
This commit is contained in:
Alyssa Rosenzweig 2023-07-14 10:26:47 -04:00 committed by Marge Bot
parent 74f8956f27
commit 9109830bb0
7 changed files with 9 additions and 7 deletions

View file

@ -2653,6 +2653,7 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
case nir_intrinsic_load_primitive_id:
return SYSTEM_VALUE_PRIMITIVE_ID;
case nir_intrinsic_load_tess_coord:
case nir_intrinsic_load_tess_coord_xy:
return SYSTEM_VALUE_TESS_COORD;
case nir_intrinsic_load_tess_level_outer:
return SYSTEM_VALUE_TESS_LEVEL_OUTER;

View file

@ -493,6 +493,7 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr)
case nir_intrinsic_interp_deref_at_centroid:
case nir_intrinsic_interp_deref_at_vertex:
case nir_intrinsic_load_tess_coord:
case nir_intrinsic_load_tess_coord_xy:
case nir_intrinsic_load_point_coord:
case nir_intrinsic_load_line_coord:
case nir_intrinsic_load_frag_coord:

View file

@ -623,6 +623,7 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,
case nir_intrinsic_load_sample_mask_in:
case nir_intrinsic_load_helper_invocation:
case nir_intrinsic_load_tess_coord:
case nir_intrinsic_load_tess_coord_xy:
case nir_intrinsic_load_patch_vertices_in:
case nir_intrinsic_load_primitive_id:
case nir_intrinsic_load_tess_level_outer:

View file

@ -839,6 +839,8 @@ system_value("sample_mask_in", 1)
system_value("primitive_id", 1)
system_value("invocation_id", 1)
system_value("tess_coord", 3)
# First 2 components of tess_coord only
system_value("tess_coord_xy", 2)
system_value("tess_level_outer", 4)
system_value("tess_level_inner", 2)
system_value("tess_level_outer_default", 4)
@ -1343,9 +1345,6 @@ system_value("tcs_out_param_base_r600", 4)
system_value("tcs_rel_patch_id_r600", 1)
system_value("tcs_tess_factor_base_r600", 1)
# the tess coords come as xy only, z has to be calculated
system_value("tess_coord_r600", 2)
# load as many components as needed giving per-component addresses
intrinsic("load_local_shared_r600", src_comp=[0], dest_comp=0, indices = [], flags = [CAN_ELIMINATE])

View file

@ -655,7 +655,7 @@ r600_lower_tess_coord_impl(nir_builder *b, UNUSED nir_instr *instr, void *_optio
{
mesa_prim prim_type = *(mesa_prim *)_options;
auto tc_xy = nir_load_tess_coord_r600(b);
auto tc_xy = nir_load_tess_coord_xy(b);
auto tc_x = nir_channel(b, tc_xy, 0);
auto tc_y = nir_channel(b, tc_xy, 1);

View file

@ -176,7 +176,7 @@ TESShader::do_scan_instruction(nir_instr *instr)
auto intr = nir_instr_as_intrinsic(instr);
switch (intr->intrinsic) {
case nir_intrinsic_load_tess_coord_r600:
case nir_intrinsic_load_tess_coord_xy:
m_sv_values.set(es_tess_coord);
break;
case nir_intrinsic_load_primitive_id:
@ -245,7 +245,7 @@ bool
TESShader::process_stage_intrinsic(nir_intrinsic_instr *intr)
{
switch (intr->intrinsic) {
case nir_intrinsic_load_tess_coord_r600:
case nir_intrinsic_load_tess_coord_xy:
return emit_simple_mov(intr->dest, 0, m_tess_coord[0], pin_none) &&
emit_simple_mov(intr->dest, 1, m_tess_coord[1], pin_none);
case nir_intrinsic_load_primitive_id:

View file

@ -2991,7 +2991,7 @@ impl main {
block block_0:
/* preds: */
vec1 32 ssa_0 = load_const (0x40000000)
vec2 32 ssa_1 = intrinsic load_tess_coord_r600 () ()
vec2 32 ssa_1 = intrinsic load_tess_coord_xy () ()
vec1 32 ssa_2 = fadd ssa_1.x, ssa_1.y
vec1 32 ssa_3 = load_const (0x3f800000)
vec1 32 ssa_4 = fsub ssa_3, ssa_2