From db0c2aa796a65cb6746d94f2a7c707884f0d6688 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Wed, 21 Aug 2024 15:14:30 -0500 Subject: [PATCH] nvk: Expose a new nvk_compile_nir_shader() helper This helper is intended for internal driver shaders. Part-of: --- src/nouveau/vulkan/nvk_shader.c | 35 ++++++++++++++++++++++++++++++++- src/nouveau/vulkan/nvk_shader.h | 4 +++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/nouveau/vulkan/nvk_shader.c b/src/nouveau/vulkan/nvk_shader.c index c7f9975da93..3c880d1abc9 100644 --- a/src/nouveau/vulkan/nvk_shader.c +++ b/src/nouveau/vulkan/nvk_shader.c @@ -590,7 +590,7 @@ nvk_compile_nir(struct nvk_device *dev, nir_shader *nir, return VK_SUCCESS; } -VkResult +static VkResult nvk_shader_upload(struct nvk_device *dev, struct nvk_shader *shader) { struct nvk_physical_device *pdev = nvk_device_physical(dev); @@ -761,6 +761,39 @@ nvk_compile_shader(struct nvk_device *dev, return VK_SUCCESS; } +VkResult +nvk_compile_nir_shader(struct nvk_device *dev, nir_shader *nir, + const VkAllocationCallbacks *alloc, + struct nvk_shader **shader_out) +{ + struct nvk_physical_device *pdev = nvk_device_physical(dev); + + const struct vk_pipeline_robustness_state rs_none = { + .uniform_buffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, + .storage_buffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, + .images = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT, + }; + + assert(nir->info.stage == MESA_SHADER_COMPUTE); + if (nir->options == NULL) + nir->options = nvk_get_nir_options(&pdev->vk, nir->info.stage, &rs_none); + + struct vk_shader_compile_info info = { + .stage = nir->info.stage, + .nir = nir, + .robustness = &rs_none, + }; + + struct vk_shader *shader; + VkResult result = nvk_compile_shader(dev, &info, NULL, alloc, &shader); + if (result != VK_SUCCESS) + return result; + + *shader_out = container_of(shader, struct nvk_shader, vk); + + return VK_SUCCESS; +} + static VkResult nvk_compile_shaders(struct vk_device *vk_dev, uint32_t shader_count, diff --git a/src/nouveau/vulkan/nvk_shader.h b/src/nouveau/vulkan/nvk_shader.h index c5f667646b5..48435efbbba 100644 --- a/src/nouveau/vulkan/nvk_shader.h +++ b/src/nouveau/vulkan/nvk_shader.h @@ -123,7 +123,9 @@ nvk_lower_nir(struct nvk_device *dev, nir_shader *nir, struct nvk_cbuf_map *cbuf_map_out); VkResult -nvk_shader_upload(struct nvk_device *dev, struct nvk_shader *shader); +nvk_compile_nir_shader(struct nvk_device *dev, nir_shader *nir, + const VkAllocationCallbacks *alloc, + struct nvk_shader **shader_out); /* Codegen wrappers. *