zink: allocate program shader caches from the program's mem ctx
authorSoroushIMG <soroush.kashani@imgtec.com>
Sun, 12 Feb 2023 17:05:15 +0000 (17:05 +0000)
committerMarge Bot <emma+marge@anholt.net>
Mon, 13 Feb 2023 19:00:06 +0000 (19:00 +0000)
these will now be freed when the program itself is freed.

cc: mesa-stable

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21285>

src/gallium/drivers/zink/zink_program.c

index f0d43be..32c7520 100644 (file)
@@ -1016,10 +1016,10 @@ zink_create_gfx_program(struct zink_context *ctx,
    prog->base.removed = true;
 
    for (int i = 0; i < ZINK_GFX_SHADER_COUNT; ++i) {
-      util_dynarray_init(&prog->shader_cache[i][0][0], NULL);
-      util_dynarray_init(&prog->shader_cache[i][0][1], NULL);
-      util_dynarray_init(&prog->shader_cache[i][1][0], NULL);
-      util_dynarray_init(&prog->shader_cache[i][1][1], NULL);
+      util_dynarray_init(&prog->shader_cache[i][0][0], prog);
+      util_dynarray_init(&prog->shader_cache[i][0][1], prog);
+      util_dynarray_init(&prog->shader_cache[i][1][0], prog);
+      util_dynarray_init(&prog->shader_cache[i][1][1], prog);
       if (stages[i]) {
          prog->shaders[i] = stages[i];
          prog->stages_present |= BITFIELD_BIT(i);
@@ -1239,8 +1239,8 @@ precompile_compute_job(void *data, void *gdata, int thread_index)
    assert(comp->module);
    comp->module->shader = zink_shader_compile(screen, comp->shader, comp->shader->nir, NULL, NULL);
    assert(comp->module->shader);
-   util_dynarray_init(&comp->shader_cache[0], NULL);
-   util_dynarray_init(&comp->shader_cache[1], NULL);
+   util_dynarray_init(&comp->shader_cache[0], comp);
+   util_dynarray_init(&comp->shader_cache[1], comp);
 
    struct blob blob = {0};
    blob_init(&blob);