nir: When nir_lower_vars_to_explicit_types is run on temps, update scratch_size
authorJesse Natalie <jenatali@microsoft.com>
Tue, 26 May 2020 19:20:20 +0000 (12:20 -0700)
committerMarge Bot <eric+marge@anholt.net>
Tue, 14 Jul 2020 18:15:40 +0000 (18:15 +0000)
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>

src/compiler/nir/nir_lower_io.c

index 70474f18852cfc585c8e7e836a2c65ee1f516fce..be18f79cdc0a389882632ce46e6cfc0fc6856bf5 100644 (file)
@@ -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;