diff options
author | Jesse Natalie <[email protected]> | 2020-05-26 12:20:20 -0700 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-07-14 18:15:40 +0000 |
commit | 99aaf0ec181efc5830deaeb7ec3331642125bc38 (patch) | |
tree | f6e21aeb13e0a7a4daec83743c58ed9a956f4331 /src | |
parent | bf138c1fd43966ba5f5933fba6cd87217100dd88 (diff) |
nir: When nir_lower_vars_to_explicit_types is run on temps, update scratch_size
To allow interop with other scratch ops, append any remaining temp vars
to the end of any already-allocated scratch space.
Reviewed-by: Jason Ekstrand <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5889>
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/nir/nir_lower_io.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c index 70474f18852..be18f79cdc0 100644 --- a/src/compiler/nir/nir_lower_io.c +++ b/src/compiler/nir/nir_lower_io.c @@ -1431,7 +1431,18 @@ lower_vars_to_explicit(nir_shader *shader, glsl_type_size_align_func type_info) { bool progress = false; - unsigned offset = 0; + unsigned offset; + switch (mode) { + case nir_var_function_temp: + case nir_var_shader_temp: + offset = shader->scratch_size; + break; + case nir_var_mem_shared: + offset = 0; + break; + default: + unreachable("Unsupported mode"); + } nir_foreach_variable(var, vars) { unsigned size, align; const struct glsl_type *explicit_type = @@ -1446,9 +1457,17 @@ lower_vars_to_explicit(nir_shader *shader, offset = var->data.driver_location + size; } - if (mode == nir_var_mem_shared) { + switch (mode) { + case nir_var_shader_temp: + case nir_var_function_temp: + shader->scratch_size = offset; + break; + case nir_var_mem_shared: shader->info.cs.shared_size = offset; shader->num_shared = offset; + break; + default: + unreachable("Unsupported mode"); } return progress; |