Mesa (main): zink: split off CreateShaderModule into util function

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 11 01:41:37 UTC 2022


Module: Mesa
Branch: main
Commit: 6c0740c1299c86bb4ca3e6fb68d87c1cc5eb04cc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6c0740c1299c86bb4ca3e6fb68d87c1cc5eb04cc

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Wed Feb  9 15:43:15 2022 -0500

zink: split off CreateShaderModule into util function

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14976>

---

 src/gallium/drivers/zink/zink_compiler.c | 43 +++++++++++++++++++-------------
 src/gallium/drivers/zink/zink_compiler.h |  4 ++-
 2 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c
index 82169148d6d..f09625e0e4f 100644
--- a/src/gallium/drivers/zink/zink_compiler.c
+++ b/src/gallium/drivers/zink/zink_compiler.c
@@ -1020,6 +1020,29 @@ zink_shader_dump(void *words, size_t size, const char *file)
    }
 }
 
+VkShaderModule
+zink_shader_spirv_compile(struct zink_screen *screen, struct zink_shader *zs, struct spirv_shader *spirv)
+{
+   VkShaderModule mod;
+   VkShaderModuleCreateInfo smci = {0};
+
+   if (zink_debug & ZINK_DEBUG_SPIRV) {
+      char buf[256];
+      static int i;
+      snprintf(buf, sizeof(buf), "dump%02d.spv", i++);
+      zink_shader_dump(spirv->words, spirv->num_words * sizeof(uint32_t), buf);
+   }
+
+   smci.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
+   smci.codeSize = spirv->num_words * sizeof(uint32_t);
+   smci.pCode = spirv->words;
+
+   VkResult ret = VKSCR(CreateShaderModule)(screen->dev, &smci, NULL, &mod);
+   bool success = zink_screen_handle_vkresult(screen, ret);
+   assert(success);
+   return success ? mod : VK_NULL_HANDLE;
+}
+
 VkShaderModule
 zink_shader_compile(struct zink_screen *screen, struct zink_shader *zs, nir_shader *base_nir, const struct zink_shader_key *key)
 {
@@ -1133,25 +1156,9 @@ zink_shader_compile(struct zink_screen *screen, struct zink_shader *zs, nir_shad
    NIR_PASS_V(nir, nir_convert_from_ssa, true);
 
    struct spirv_shader *spirv = nir_to_spirv(nir, sinfo, screen->spirv_version);
-   if (!spirv)
-      goto done;
-
-   if (zink_debug & ZINK_DEBUG_SPIRV) {
-      char buf[256];
-      static int i;
-      snprintf(buf, sizeof(buf), "dump%02d.spv", i++);
-      zink_shader_dump(spirv->words, spirv->num_words * sizeof(uint32_t), buf);
-   }
-
-   VkShaderModuleCreateInfo smci = {0};
-   smci.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
-   smci.codeSize = spirv->num_words * sizeof(uint32_t);
-   smci.pCode = spirv->words;
-
-   if (VKSCR(CreateShaderModule)(screen->dev, &smci, NULL, &mod) != VK_SUCCESS)
-      mod = VK_NULL_HANDLE;
+   if (spirv)
+      mod = zink_shader_spirv_compile(screen, zs, spirv);
 
-done:
    ralloc_free(nir);
 
    /* TODO: determine if there's any reason to cache spirv output? */
diff --git a/src/gallium/drivers/zink/zink_compiler.h b/src/gallium/drivers/zink/zink_compiler.h
index 13036463043..cb4d349e9c8 100644
--- a/src/gallium/drivers/zink/zink_compiler.h
+++ b/src/gallium/drivers/zink/zink_compiler.h
@@ -44,6 +44,7 @@ struct zink_screen;
 struct zink_shader_key;
 struct zink_shader_module;
 struct zink_gfx_program;
+struct spirv_shader;
 
 struct nir_shader_compiler_options;
 struct nir_shader;
@@ -104,7 +105,8 @@ void
 zink_compiler_assign_io(nir_shader *producer, nir_shader *consumer);
 VkShaderModule
 zink_shader_compile(struct zink_screen *screen, struct zink_shader *zs, nir_shader *nir, const struct zink_shader_key *key);
-
+VkShaderModule
+zink_shader_spirv_compile(struct zink_screen *screen, struct zink_shader *zs, struct spirv_shader *spirv);
 struct zink_shader *
 zink_shader_create(struct zink_screen *screen, struct nir_shader *nir,
                  const struct pipe_stream_output_info *so_info);



More information about the mesa-commit mailing list