diff --git a/src/vulkan/runtime/vk_pipeline.c b/src/vulkan/runtime/vk_pipeline.c index a946f759561..da3e0da77dc 100644 --- a/src/vulkan/runtime/vk_pipeline.c +++ b/src/vulkan/runtime/vk_pipeline.c @@ -32,6 +32,21 @@ #include "util/mesa-sha1.h" +bool +vk_pipeline_shader_stage_is_null(const VkPipelineShaderStageCreateInfo *info) +{ + if (info->module != VK_NULL_HANDLE) + return false; + + vk_foreach_struct_const(ext, info->pNext) { + if (ext->sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO || + ext->sType == VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT) + return false; + } + + return true; +} + static uint32_t get_required_subgroup_size(const VkPipelineShaderStageCreateInfo *info) { diff --git a/src/vulkan/runtime/vk_pipeline.h b/src/vulkan/runtime/vk_pipeline.h index a5bff1d55e8..e4ead1a2bf5 100644 --- a/src/vulkan/runtime/vk_pipeline.h +++ b/src/vulkan/runtime/vk_pipeline.h @@ -26,6 +26,8 @@ #include "vulkan/vulkan_core.h" +#include + struct nir_shader; struct nir_shader_compiler_options; struct spirv_to_nir_options; @@ -35,6 +37,9 @@ struct vk_device; extern "C" { #endif +bool +vk_pipeline_shader_stage_is_null(const VkPipelineShaderStageCreateInfo *info); + VkResult vk_pipeline_shader_stage_to_nir(struct vk_device *device, const VkPipelineShaderStageCreateInfo *info,