zink: more zink_shader_object conversion
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Fri, 31 Mar 2023 19:48:40 +0000 (15:48 -0400)
committerMarge Bot <emma+marge@anholt.net>
Mon, 24 Apr 2023 02:49:18 +0000 (02:49 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22612>

src/gallium/drivers/zink/zink_compiler.c
src/gallium/drivers/zink/zink_compiler.h
src/gallium/drivers/zink/zink_program.c

index c480fcf..6604b47 100644 (file)
@@ -3104,10 +3104,9 @@ zink_shader_dump(void *words, size_t size, const char *file)
    }
 }
 
-static VkShaderModule
+static struct zink_shader_object
 zink_shader_spirv_compile(struct zink_screen *screen, struct zink_shader *zs, struct spirv_shader *spirv)
 {
-   VkShaderModule mod;
    VkShaderModuleCreateInfo smci = {0};
 
    if (!spirv)
@@ -3198,10 +3197,11 @@ zink_shader_spirv_compile(struct zink_screen *screen, struct zink_shader *zs, st
    }
 #endif
 
-   VkResult ret = VKSCR(CreateShaderModule)(screen->dev, &smci, NULL, &mod);
+   struct zink_shader_object obj;
+   VkResult ret = VKSCR(CreateShaderModule)(screen->dev, &smci, NULL, &obj.mod);
    bool success = zink_screen_handle_vkresult(screen, ret);
    assert(success);
-   return success ? mod : VK_NULL_HANDLE;
+   return obj;
 }
 
 static void
@@ -3411,22 +3411,21 @@ invert_point_coord(nir_shader *nir)
 static struct zink_shader_object
 compile_module(struct zink_screen *screen, struct zink_shader *zs, nir_shader *nir)
 {
-   VkShaderModule mod = VK_NULL_HANDLE;
    struct zink_shader_info *sinfo = &zs->sinfo;
    prune_io(nir);
 
    NIR_PASS_V(nir, nir_convert_from_ssa, true);
 
+   struct zink_shader_object obj;
    struct spirv_shader *spirv = nir_to_spirv(nir, sinfo, screen->spirv_version);
    if (spirv)
-      mod = zink_shader_spirv_compile(screen, zs, spirv);
+      obj = zink_shader_spirv_compile(screen, zs, spirv);
 
    /* TODO: determine if there's any reason to cache spirv output? */
    if (zs->info.stage == MESA_SHADER_TESS_CTRL && zs->non_fs.is_generated)
       zs->spirv = spirv;
    else
       ralloc_free(spirv);
-   struct zink_shader_object obj = {.mod = mod};
    return obj;
 }
 
@@ -5072,7 +5071,7 @@ zink_gfx_shader_free(struct zink_screen *screen, struct zink_shader *shader)
 }
 
 
-VkShaderModule
+struct zink_shader_object
 zink_shader_tcs_compile(struct zink_screen *screen, struct zink_shader *zs, unsigned patch_vertices)
 {
    assert(zs->info.stage == MESA_SHADER_TESS_CTRL);
index da68254..2fb84f7 100644 (file)
@@ -82,7 +82,7 @@ zink_shader_free(struct zink_screen *screen, struct zink_shader *shader);
 void
 zink_gfx_shader_free(struct zink_screen *screen, struct zink_shader *shader);
 
-VkShaderModule
+struct zink_shader_object
 zink_shader_tcs_compile(struct zink_screen *screen, struct zink_shader *zs, unsigned patch_vertices);
 struct zink_shader *
 zink_shader_tcs_create(struct zink_screen *screen, nir_shader *tes, unsigned vertices_per_patch, nir_shader **nir_ret);
index d5e5b41..5d5a3e5 100644 (file)
@@ -150,7 +150,8 @@ create_shader_module_for_stage(struct zink_context *ctx, struct zink_screen *scr
    unsigned patch_vertices = state->shader_keys.key[MESA_SHADER_TESS_CTRL ].key.tcs.patch_vertices;
    if (stage == MESA_SHADER_TESS_CTRL && zs->non_fs.is_generated && zs->spirv) {
       assert(ctx); //TODO async
-      mod = zink_shader_tcs_compile(screen, zs, patch_vertices);
+      struct zink_shader_object obj = zink_shader_tcs_compile(screen, zs, patch_vertices);
+      mod = obj.mod;
    } else {
       mod = zink_shader_compile(screen, zs, zink_shader_blob_deserialize(screen, &prog->blobs[stage]), key, &ctx->di.zs_swizzle[stage]);
    }
@@ -265,7 +266,8 @@ create_shader_module_for_stage_optimal(struct zink_context *ctx, struct zink_scr
    if (stage == MESA_SHADER_TESS_CTRL && zs->non_fs.is_generated && zs->spirv) {
       assert(ctx); //TODO async
       struct zink_tcs_key *tcs = (struct zink_tcs_key*)key;
-      mod = zink_shader_tcs_compile(screen, zs, tcs->patch_vertices);
+      struct zink_shader_object obj = zink_shader_tcs_compile(screen, zs, tcs->patch_vertices);
+      mod = obj.mod;
    } else {
       mod = zink_shader_compile(screen, zs, zink_shader_blob_deserialize(screen, &prog->blobs[stage]), (struct zink_shader_key*)key, shadow_needs_shader_swizzle ? &ctx->di.zs_swizzle[stage] : NULL);
    }