在OpenGL中是否有内置的方法来查找编译的spir着色器支持的入口点和着色器阶段,还是必须使用像https://github.com/KhronosGroup/SPIRV-Reflect这样的单独库?
编辑:我最后使用了SPIRV
我的资产管道将所有需要链接到程序中的阶段链接到一个二进制blob中,然后我使用
uint32_t GetEntryPointCount() const;
const char* GetEntryPointName(uint32_t index) const;
SpvReflectShaderStageFlagBits GetEntryPointShaderStage(uint32_t index) const;若要枚举入口点并将相应的着色器附加到程序中,请执行以下操作。
发布于 2022-10-02 15:30:23
OpenGL只有链接程序的自省设施。程序链接要求首先编译着色器对象。而SPIR加载产生的着色对象将“汇编”改为专门化.SPIR-V着色器的专业化要求知道您想使用的入口点。
所以不,OpenGL无法查看SPIR模块中有哪些入口点可用。再说,这也没什么用。SPIR只能加载到着色器对象中,而着色器对象是为特定的着色器阶段创建的。因此,除非在同一阶段有多个入口点,否则只有一个入口点可以供您寻找:它的阶段与着色器对象类型匹配。
因此,OpenGL已经希望您有一些与任何特定的SPIR模块加载操作相关联的附加信息。只需将入口点名称放入该附加信息中,或为特定着色器阶段的入口点名称建立约定。
https://stackoverflow.com/questions/73926911
复制相似问题