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

Author: Faith Ekstrand <[email protected]>
Date:   Tue Nov 14 11:56:02 2023 -0600

nvk: Add a codegen helper for nir_shader_compiler_options

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

---

 src/nouveau/vulkan/meson.build   |  1 +
 src/nouveau/vulkan/nvk_codegen.c | 50 ++++++++++++++++++++++++++++++++++++++++
 src/nouveau/vulkan/nvk_shader.c  | 25 +++++---------------
 src/nouveau/vulkan/nvk_shader.h  | 12 ++++++++++
 4 files changed, 69 insertions(+), 19 deletions(-)

diff --git a/src/nouveau/vulkan/meson.build b/src/nouveau/vulkan/meson.build
index 6912e6baaee..e69a8f562db 100644
--- a/src/nouveau/vulkan/meson.build
+++ b/src/nouveau/vulkan/meson.build
@@ -15,6 +15,7 @@ nvk_files = files(
   'nvk_cmd_meta.c',
   'nvk_cmd_pool.c',
   'nvk_cmd_pool.h',
+  'nvk_codegen.c',
   'nvk_compute_pipeline.c',
   'nvk_descriptor_set.h',
   'nvk_descriptor_set.c',
diff --git a/src/nouveau/vulkan/nvk_codegen.c b/src/nouveau/vulkan/nvk_codegen.c
new file mode 100644
index 00000000000..22e4de35c93
--- /dev/null
+++ b/src/nouveau/vulkan/nvk_codegen.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright © 2022 Collabora Ltd. and Red Hat Inc.
+ * SPDX-License-Identifier: MIT
+ */
+#include "nvk_physical_device.h"
+#include "nvk_shader.h"
+
+#include "nv50_ir_driver.h"
+
+uint64_t
+nvk_cg_get_prog_debug(void)
+{
+   return debug_get_num_option("NV50_PROG_DEBUG", 0);
+}
+
+uint64_t
+nvk_cg_get_prog_optimize(void)
+{
+   return debug_get_num_option("NV50_PROG_OPTIMIZE", 3);
+}
+
+static inline enum pipe_shader_type
+pipe_shader_type_from_mesa(gl_shader_stage stage)
+{
+   switch (stage) {
+   case MESA_SHADER_VERTEX:
+      return PIPE_SHADER_VERTEX;
+   case MESA_SHADER_TESS_CTRL:
+      return PIPE_SHADER_TESS_CTRL;
+   case MESA_SHADER_TESS_EVAL:
+      return PIPE_SHADER_TESS_EVAL;
+   case MESA_SHADER_GEOMETRY:
+      return PIPE_SHADER_GEOMETRY;
+   case MESA_SHADER_FRAGMENT:
+      return PIPE_SHADER_FRAGMENT;
+   case MESA_SHADER_COMPUTE:
+   case MESA_SHADER_KERNEL:
+      return PIPE_SHADER_COMPUTE;
+   default:
+      unreachable("bad shader stage");
+   }
+}
+
+const nir_shader_compiler_options *
+nvk_cg_nir_options(const struct nvk_physical_device *pdev,
+                   gl_shader_stage stage)
+{
+   enum pipe_shader_type p_stage = pipe_shader_type_from_mesa(stage);
+   return nv50_ir_nir_shader_compiler_options(pdev->info.chipset, p_stage);
+}
diff --git a/src/nouveau/vulkan/nvk_shader.c b/src/nouveau/vulkan/nvk_shader.c
index 35eb77785b8..3643f444a83 100644
--- a/src/nouveau/vulkan/nvk_shader.c
+++ b/src/nouveau/vulkan/nvk_shader.c
@@ -67,18 +67,6 @@ pipe_shader_type_from_mesa(gl_shader_stage stage)
    }
 }
 
-static uint64_t
-get_prog_debug(void)
-{
-   return debug_get_num_option("NV50_PROG_DEBUG", 0);
-}
-
-static uint64_t
-get_prog_optimize(void)
-{
-   return debug_get_num_option("NV50_PROG_OPTIMIZE", 3);
-}
-
 VkShaderStageFlags
 nvk_nak_stages(const struct nv_device_info *info)
 {
@@ -109,8 +97,8 @@ use_nak(const struct nvk_physical_device *pdev, 
gl_shader_stage stage)
 uint64_t
 nvk_physical_device_compiler_flags(const struct nvk_physical_device *pdev)
 {
-   uint64_t prog_debug = get_prog_debug();
-   uint64_t prog_optimize = get_prog_optimize();
+   uint64_t prog_debug = nvk_cg_get_prog_debug();
+   uint64_t prog_optimize = nvk_cg_get_prog_optimize();
    uint64_t nak_stages = nvk_nak_stages(&pdev->info);
    uint64_t nak_flags = nak_debug_flags(pdev->nak);
 
@@ -131,9 +119,8 @@ nvk_physical_device_nir_options(const struct 
nvk_physical_device *pdev,
 {
    if (use_nak(pdev, stage))
       return nak_nir_options(pdev->nak);
-
-   enum pipe_shader_type p_stage = pipe_shader_type_from_mesa(stage);
-   return nv50_ir_nir_shader_compiler_options(pdev->info.chipset, p_stage);
+   else
+      return nvk_cg_nir_options(pdev, stage);
 }
 
 struct spirv_to_nir_options
@@ -1298,8 +1285,8 @@ nvk_compile_nir(struct nvk_physical_device *pdev, 
nir_shader *nir,
       shader->cp.block_size[i] = nir->info.workgroup_size[i];
 
    info->bin.smemSize = shader->cp.smem_size;
-   info->dbgFlags = get_prog_debug();
-   info->optLevel = get_prog_optimize();
+   info->dbgFlags = nvk_cg_get_prog_debug();
+   info->optLevel = nvk_cg_get_prog_optimize();
    info->io.auxCBSlot = 1;
    info->io.uboInfoBase = 0;
    info->io.drawInfoBase = nvk_root_descriptor_offset(draw.base_vertex);
diff --git a/src/nouveau/vulkan/nvk_shader.h b/src/nouveau/vulkan/nvk_shader.h
index 2ee8265c3ad..40847711674 100644
--- a/src/nouveau/vulkan/nvk_shader.h
+++ b/src/nouveau/vulkan/nvk_shader.h
@@ -153,4 +153,16 @@ nvk_shader_upload(struct nvk_device *dev, struct 
nvk_shader *shader);
 
 void
 nvk_shader_finish(struct nvk_device *dev, struct nvk_shader *shader);
+
+/* Codegen wrappers.
+ *
+ * TODO: Delete these once NAK supports everything.
+ */
+uint64_t nvk_cg_get_prog_debug(void);
+uint64_t nvk_cg_get_prog_optimize(void);
+
+const nir_shader_compiler_options *
+nvk_cg_nir_options(const struct nvk_physical_device *pdev,
+                   gl_shader_stage stage);
+
 #endif

Reply via email to