nir: add load_mesh_view_count and load_mesh_view_indices intrinsics

Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Acked-by: Timur Kristóf <timur.kristof@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14263>
This commit is contained in:
Marcin Ślusarz
2021-09-10 16:42:01 +02:00
committed by Marge Bot
parent e4ff7fd76a
commit 4fed440724
3 changed files with 15 additions and 1 deletions
+4
View File
@@ -2461,6 +2461,8 @@ nir_intrinsic_from_system_value(gl_system_value val)
return nir_intrinsic_load_ray_geometry_index;
case SYSTEM_VALUE_RAY_INSTANCE_CUSTOM_INDEX:
return nir_intrinsic_load_ray_instance_custom_index;
case SYSTEM_VALUE_MESH_VIEW_COUNT:
return nir_intrinsic_load_mesh_view_count;
case SYSTEM_VALUE_FRAG_SHADING_RATE:
return nir_intrinsic_load_frag_shading_rate;
default:
@@ -2602,6 +2604,8 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
return SYSTEM_VALUE_RAY_INSTANCE_CUSTOM_INDEX;
case nir_intrinsic_load_frag_shading_rate:
return SYSTEM_VALUE_FRAG_SHADING_RATE;
case nir_intrinsic_load_mesh_view_count:
return SYSTEM_VALUE_MESH_VIEW_COUNT;
default:
unreachable("intrinsic doesn't produce a system value");
}
+4
View File
@@ -1020,6 +1020,10 @@ intrinsic("printf", src_comp=[1, 1], dest_comp=1, bit_sizes=[32])
# the driver to at least provide a base location
system_value("printf_buffer_address", 1, bit_sizes=[32,64])
# Mesh shading MultiView intrinsics
system_value("mesh_view_count", 1)
load("mesh_view_indices", [1], [BASE, RANGE], [CAN_ELIMINATE, CAN_REORDER])
# IR3-specific version of most SSBO intrinsics. The only different
# compare to the originals is that they add an extra source to hold
# the dword-offset, which is needed by the backend code apart from
+7 -1
View File
@@ -137,7 +137,8 @@ lower_system_value_instr(nir_builder *b, nir_instr *instr, void *_state)
assert(deref->deref_type == nir_deref_type_var);
assert(deref->var->data.location == SYSTEM_VALUE_SAMPLE_MASK_IN ||
deref->var->data.location == SYSTEM_VALUE_RAY_OBJECT_TO_WORLD ||
deref->var->data.location == SYSTEM_VALUE_RAY_WORLD_TO_OBJECT);
deref->var->data.location == SYSTEM_VALUE_RAY_WORLD_TO_OBJECT ||
deref->var->data.location == SYSTEM_VALUE_MESH_VIEW_INDICES);
}
nir_variable *var = deref->var;
@@ -207,6 +208,11 @@ lower_system_value_instr(nir_builder *b, nir_instr *instr, void *_state)
break;
}
case SYSTEM_VALUE_MESH_VIEW_INDICES:
return nir_load_mesh_view_indices(b, intrin->dest.ssa.num_components,
bit_size, column, .base = 0,
.range = intrin->dest.ssa.num_components * bit_size / 8);
default:
break;
}