intel/fs: make tcs input_vertices dynamic
We need to do 3 things to accomplish this : 1. make all the register access consider the maximal case when unknown at compile time 2. move the clamping of load_per_vertex_input prior to lowering nir_intrinsic_load_patch_vertices_in (in the dynamic cases, the clamping will use the nir_intrinsic_load_patch_vertices_in to clamp), meaning clamping using derefs rather than lowered nir_intrinsic_load_per_vertex_input 3. in the known cases, lower nir_intrinsic_load_patch_vertices_in in NIR (so that the clamped elements still be vectorized to the smallest number of URB read messages) Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22378>
This commit is contained in:

committed by
Marge Bot

parent
32b7659fff
commit
429ef02f83
@@ -1049,6 +1049,14 @@ brw_preprocess_nir(const struct brw_compiler *compiler, nir_shader *nir,
|
||||
nir_var_mem_ubo | nir_var_mem_ssbo,
|
||||
nir_lower_direct_array_deref_of_vec_load);
|
||||
|
||||
/* Clamp load_per_vertex_input of the TCS stage so that we do not generate
|
||||
* loads reading out of bounds. We can do this here because we called
|
||||
* nir_lower_system_values above.
|
||||
*/
|
||||
if (nir->info.stage == MESA_SHADER_TESS_CTRL &&
|
||||
compiler->use_tcs_multi_patch)
|
||||
OPT(brw_nir_clamp_per_vertex_loads);
|
||||
|
||||
/* Get rid of split copies */
|
||||
brw_nir_optimize(nir, compiler);
|
||||
}
|
||||
@@ -1985,6 +1993,8 @@ nir_shader *
|
||||
brw_nir_create_passthrough_tcs(void *mem_ctx, const struct brw_compiler *compiler,
|
||||
const struct brw_tcs_prog_key *key)
|
||||
{
|
||||
assert(key->input_vertices > 0);
|
||||
|
||||
const nir_shader_compiler_options *options =
|
||||
compiler->nir_options[MESA_SHADER_TESS_CTRL];
|
||||
|
||||
|
Reference in New Issue
Block a user