mesa/st: Free the NIR builtins TGSI tokens after passing to the driver.
authorEric Anholt <eric@anholt.net>
Mon, 11 Jan 2021 19:09:12 +0000 (11:09 -0800)
committerMarge Bot <eric+marge@anholt.net>
Tue, 12 Jan 2021 19:46:22 +0000 (19:46 +0000)
The driver interface doesn't take ownership of the TGSI tokens, so free
our temporary.

Fixes: 57effa342b75 ("st/mesa: Drop the TGSI paths for PBOs and use nir-to-tgsi if needed.")
Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8422>

src/mesa/state_tracker/st_nir_builtins.c

index 2f7520b..cdeb5a0 100644 (file)
@@ -26,6 +26,7 @@
 #include "compiler/nir/nir_builder.h"
 #include "compiler/glsl/gl_nir.h"
 #include "nir/nir_to_tgsi.h"
+#include "tgsi/tgsi_parse.h"
 
 struct pipe_shader_state *
 st_nir_finish_builtin_shader(struct st_context *st,
@@ -81,21 +82,32 @@ st_nir_finish_builtin_shader(struct st_context *st,
       ralloc_free(nir);
    }
 
+   struct pipe_shader_state *shader;
    switch (stage) {
    case MESA_SHADER_VERTEX:
-      return pipe->create_vs_state(pipe, &state);
+      shader = pipe->create_vs_state(pipe, &state);
+      break;
    case MESA_SHADER_TESS_CTRL:
-      return pipe->create_tcs_state(pipe, &state);
+      shader = pipe->create_tcs_state(pipe, &state);
+      break;
    case MESA_SHADER_TESS_EVAL:
-      return pipe->create_tes_state(pipe, &state);
+      shader = pipe->create_tes_state(pipe, &state);
+      break;
    case MESA_SHADER_GEOMETRY:
-      return pipe->create_gs_state(pipe, &state);
+      shader = pipe->create_gs_state(pipe, &state);
+      break;
    case MESA_SHADER_FRAGMENT:
-      return pipe->create_fs_state(pipe, &state);
+      shader = pipe->create_fs_state(pipe, &state);
+      break;
    default:
       unreachable("unsupported shader stage");
       return NULL;
    }
+
+   if (state.type == PIPE_SHADER_IR_TGSI)
+      tgsi_free_tokens(state.tokens);
+
+   return shader;
 }
 
 /**