r600: fix refcnt imbalance related to shader
authorPatrick Lerda <patrick9876@free.fr>
Mon, 20 Mar 2023 22:34:36 +0000 (23:34 +0100)
committerMarge Bot <emma+marge@anholt.net>
Fri, 24 Mar 2023 17:21:06 +0000 (17:21 +0000)
Indeed, gs_copy_shader was not freed.

Fixes: commit 1371d65a7fbd695d3516861fe733685569d890d0
    r600g: initial support for geometry shaders on evergreen (v2)

For instance, with "piglit/bin/shader_runner generated_tests/spec/arb_gpu_shader_int64/execution/built-in-functions/gs-abs-i64vec2.shader_test -auto -fbo"
while setting GALLIUM_REFCNT_LOG=refcnt.log.

Signed-off-by: Patrick Lerda <patrick9876@free.fr>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22087>

src/gallium/drivers/r600/r600_state_common.c

index 31a9b72..ef2e6a6 100644 (file)
@@ -1178,6 +1178,10 @@ void r600_delete_shader_selector(struct pipe_context *ctx,
        struct r600_pipe_shader *p = sel->current, *c;
        while (p) {
                c = p->next_variant;
+               if (p->gs_copy_shader) {
+                       r600_pipe_shader_destroy(ctx, p->gs_copy_shader);
+                       free(p->gs_copy_shader);
+               }
                r600_pipe_shader_destroy(ctx, p);
                free(p);
                p = c;