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 <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5889>
This commit is contained in:
@@ -1431,7 +1431,18 @@ lower_vars_to_explicit(nir_shader *shader,
|
|||||||
glsl_type_size_align_func type_info)
|
glsl_type_size_align_func type_info)
|
||||||
{
|
{
|
||||||
bool progress = false;
|
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) {
|
nir_foreach_variable(var, vars) {
|
||||||
unsigned size, align;
|
unsigned size, align;
|
||||||
const struct glsl_type *explicit_type =
|
const struct glsl_type *explicit_type =
|
||||||
@@ -1446,9 +1457,17 @@ lower_vars_to_explicit(nir_shader *shader,
|
|||||||
offset = var->data.driver_location + size;
|
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->info.cs.shared_size = offset;
|
||||||
shader->num_shared = offset;
|
shader->num_shared = offset;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
unreachable("Unsupported mode");
|
||||||
}
|
}
|
||||||
|
|
||||||
return progress;
|
return progress;
|
||||||
|
Reference in New Issue
Block a user