在 vulkan 的 main 旁边使用不同的入口点

Using different entry point beside main in vulkan

我知道在 Vulkan 中创建着色器模块时,您可以使用 pNameVkPipelineShaderStageCreateInfo 中指定入口点。

但是,我无法在我的 glsl/spv 文件中使用其他入口点,但 'main'。

typedef struct VkPipelineShaderStageCreateInfo {
  VkStructureType                     sType;
  const void*                         pNext;
  VkPipelineShaderStageCreateFlags    flags;
  VkShaderStageFlagBits               stage;
  VkShaderModule                      module;
  const char*                         pName;
  const VkSpecializationInfo*         pSpecializationInfo;
} VkPipelineShaderStageCreateInfo;

有没有人用过这个功能,可以举个例子吗?谢谢

我以前尝试过,我相信目前使用官方 glslcglslangValidator.

是不可能的

注意 GLSL 强制要求一个 main 函数,因此作者可能发现它没有用。

glslc 直截了当地说相关参数仅适用于 HLSL。

glslangValidator 不太清楚,但是当使用 GLSL 时相关参数(在撰写本文时)被忽略。

更新: 有一个relevant GitHub Issue。并且此功能得到了支持。所以你必须等待下一个 SDK 版本,或者从 master.

构建编译器

确实在测试它适用的版本:

glslangValidator.exe -V -H -e mymain --source-entrypoint main -o hello.spv hello.vert

如果在 GLSL 中使用非 main 函数,编译器会记录错误,但它似乎仍然可以工作:

glslangValidator.exe -V -H -e mymain --source-entrypoint sourcemain -o hello.spv hello.vert