首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPIR-V着色器中GLSL扩展的查询存在性

SPIR-V着色器中GLSL扩展的查询存在性
EN

Stack Overflow用户
提问于 2018-03-10 14:16:34
回答 1查看 318关注 0票数 0

在普通GLSL中,我可以这样做,以便有条件地启用GLSL扩展:

代码语言:javascript
复制
#if defined(GL_ARB_shader_viewport_layer_array)
    #extension GL_ARB_shader_viewport_layer_array : enable
    // Some other stuff here
#endif

我的问题是,如何在SPIR中使用glslang库实现相同的目标?我假设我需要编译同一个着色器的多个版本才能实现这一点?或者,是否有一种方法可以在没有为两个版本生成两个二进制文件的情况下对SPIR的存在进行条件化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-10 15:02:34

在普通GLSL中,我可以这样做,以便有条件地启用GLSL扩展:

首先,不,你不能。不是每个GLSL的OpenGL扩展都公开这样的定义。例如,在阵列扩展中的任何地方都找不到要指定的定义。相反,投票延期确实指定了一个#define

第二,即使扩展提供了#define,但仍然无法工作。因为只有在使用#extension指令激活扩展时,#define才会公开。因此,您的示例将永远不会使shader_viewport_layer_array工作。

如果你想要一个延期须有条件存在,你可以使用#extension NAME : enable。如果实现不支持扩展,则不会得到它(您将在着色器日志文件中得到警告)。使用前面讨论的#define检测扩展是否处于活动状态。

至于如何用SPIR-V.你不知道。斯皮尔-V是中级语言,不是高级语言。人们期望SPIR是针对特定版本的主机环境编写的,包括扩展。如果您想要有条件地支持某些扩展,而不是其他扩展,您必须为您打算支持的扩展组合生成多个SPIR着色器。

SPIR-V与#ifdef没有任何等价之处,因为它是一种中间语言。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49210073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档