首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我什么时候需要GL_EXT_nonuniform_qualifier?

我什么时候需要GL_EXT_nonuniform_qualifier?
EN

Stack Overflow用户
提问于 2022-02-02 01:19:51
回答 1查看 410关注 0票数 0

我想把下面的代码编译成SPIR-V

代码语言:javascript
运行
复制
#version 450 core
#define BATCH_ID (PushConstants.Indices.x >> 16)
#define MATERIAL_ID (PushConstants.Indices.x & 0xFFFF)

layout (push_constant) uniform constants {
    ivec2 Indices;
} PushConstants;

layout (constant_id = 1) const int MATERIAL_SIZE = 32;

in Vertex_Fragment {
    layout(location = 0) vec4 VertexColor;
    layout(location = 1) vec2 TexCoord;
} inData;

struct ParameterFrequence_3 {
    int ColorMap;
};
layout (set = 3, binding = 0, std140) uniform ParameterFrequence_3 {
    ParameterFrequence_3[MATERIAL_SIZE] data;
} Frequence_3;

layout (location = 0) out vec4 out_Color;

layout (set = 2, binding = 0) uniform sampler2D[] Sampler2DResources;


void main(void) {
    vec4 color = vec4(1.0);
    color *= texture(Sampler2DResources[Frequence_3.data[MATERIAL_ID].ColorMap], inData.TexCoord);
    color *= inData.VertexColor;
    out_Color = color;
}

(代码是由我正在开发的程序生成的,这就是为什么代码看起来可能有点奇怪,但它应该清楚地说明问题)。

当我试图这么做的时候,有人告诉我

代码语言:javascript
运行
复制
error: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier

(在第三行中,纹理查找也在进行)

在我讨论了动态统一是如何指定的,阴影语言规范基本上说范围是由API指定的,而OpenGL和Vulkan实际上都没有这样做(也许已经改变了)之后,我很困惑为什么会出现这个错误。

最初,我想为索引使用实例顶点属性,但是这些属性并不是动态统一的,这正是我所认为的PushConstants应该是的。

因此,当PushConstants在抽签调用期间是常量(这是动态统一需求的最大范围)时,上述着色器如何在任何动态非均匀状态下结束?

编辑:这与支持"ColorMap“存储的缓冲区可能被另一个缓冲区别名有关吗?在调用过程中,可以通过另一个缓冲区修改内容?或者有什么方法可以告诉编译器这是一个“受限”的存储,所以它知道它是常量的?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-02 02:17:41

现在是凌晨3点,我该去睡觉了。

每个人最终都会遇到同样的问题,但我宁愿自己回答,也不愿删除:

我只需添加一个SpecializationConstant来设置sampler2D数组的大小,现在它可以工作,而不需要任何扩展。

晚安

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

https://stackoverflow.com/questions/70949572

复制
相关文章

相似问题

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