在 vulkan 的 main 旁边使用不同的入口点
Using different entry point beside main in vulkan
我知道在 Vulkan 中创建着色器模块时,您可以使用 pName
在 VkPipelineShaderStageCreateInfo
中指定入口点。
但是,我无法在我的 glsl/spv 文件中使用其他入口点,但 'main'。
typedef struct VkPipelineShaderStageCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineShaderStageCreateFlags flags;
VkShaderStageFlagBits stage;
VkShaderModule module;
const char* pName;
const VkSpecializationInfo* pSpecializationInfo;
} VkPipelineShaderStageCreateInfo;
有没有人用过这个功能,可以举个例子吗?谢谢
我以前尝试过,我相信目前使用官方 glslc
或 glslangValidator
.
是不可能的
注意 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
我知道在 Vulkan 中创建着色器模块时,您可以使用 pName
在 VkPipelineShaderStageCreateInfo
中指定入口点。
但是,我无法在我的 glsl/spv 文件中使用其他入口点,但 'main'。
typedef struct VkPipelineShaderStageCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineShaderStageCreateFlags flags;
VkShaderStageFlagBits stage;
VkShaderModule module;
const char* pName;
const VkSpecializationInfo* pSpecializationInfo;
} VkPipelineShaderStageCreateInfo;
有没有人用过这个功能,可以举个例子吗?谢谢
我以前尝试过,我相信目前使用官方 glslc
或 glslangValidator
.
注意 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