mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-24 16:50:22 +01:00
ntt: lower indirect tesslevels in ntt
Tessellation shader which are using indirect addressing for tesslevels e.g gl_TessLevelOuter[gl_InvocationID] = tessLevelOuter; are crashing because gl_TessLevelOuter is now a compact array variable and nir expects a constant array index into the compact array variable. This patch handles such cases. This fixes MR 21940 Fixes:84006587d7("glsl: Delete the lower_tess_level pass.") Tested with glretrace Reviewed-by: Charmaine Lee <charmainel@vmware.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25773> (cherry picked from commit8cfb46e27d)
This commit is contained in:
parent
a0690566bd
commit
e886ef760c
2 changed files with 10 additions and 1 deletions
|
|
@ -1764,7 +1764,7 @@
|
|||
"description": "ntt: lower indirect tesslevels in ntt",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "84006587d7e5b87526a9b83135393251afeef777",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -3898,6 +3898,15 @@ const void *nir_to_tgsi_options(struct nir_shader *s,
|
|||
NIR_PASS_V(s, nir_remove_dead_variables, nir_var_shader_in, NULL);
|
||||
}
|
||||
|
||||
/* Lower tesslevel indirect derefs for tessellation shader.
|
||||
* tesslevels are now a compact array variable and nir expects a constant
|
||||
* array index into the compact array variable.
|
||||
*/
|
||||
if (s->info.stage == MESA_SHADER_TESS_CTRL ||
|
||||
s->info.stage == MESA_SHADER_TESS_EVAL) {
|
||||
NIR_PASS_V(s, nir_lower_indirect_derefs, 0 , UINT32_MAX);
|
||||
}
|
||||
|
||||
NIR_PASS_V(s, nir_lower_io, nir_var_shader_in | nir_var_shader_out,
|
||||
type_size, (nir_lower_io_options)0);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue