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
