问题标签 [spir-v]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5434 浏览

glsl - Vulkan 中的实例化 GLSL 着色器?

这是我能想到的(最简单的)实例化着色器,它基本上只是转换了一堆 2D 基元:

如果我尝试使用 Vulkan SDK 附带的 glslangValidator 将其编译为 SPIR-V,我会得到:

如果我删除该#extension GL_ARB_draw_instanced行,我仍然会收到gl_InstanceID错误消息。是否可以编写实例化 GLSL 并将它们编译为 SPIR-V?如果是这样,我做错了什么?

0 投票
3 回答
12980 浏览

c++ - 如何使用 glslang

我正在尝试使用 glslang 将 glsl 着色器代码编译为 SPIR-V 二进制文件。glslang 项目可以在这里找到:

https://github.com/KhronosGroup/glslang

它可以通过命令行中的 glslangValidator.exe 手动运行。但我想使用 c++ 接口。

我已经按照 github 页面上的描述构建了项目,现在我正在为如何实际使用该界面而苦苦挣扎。

我宁愿实际上不在我的解决方案中包含任何项目(我正在使用 Visual Studio),而是链接使用它所需的 .lib 和标头。我只是找不到我需要链接的那些。github页面只提到ShaderLang.h和StandAlone.cpp,还不够。

有人可以解释如何设置一个可以使用 glslang 的项目吗?我只需要将 glsl 着色器代码编译为 SPIR-V 二进制文件(带有有关着色器编译的调试信息)。我想对于已经做过或有更多经验的人来说,这将是一个非常简单的问题。

0 投票
1 回答
588 浏览

glsl - 有没有办法在 vkCreateShaderModule 之后在 Vulkan 中获取属性和制服?

就像在 opengl 中我们可以做 glGetActiveAttrib 和 glGetActiveUniform。

0 投票
1 回答
738 浏览

opencl - 有没有办法在 Vulkan 计算着色器中使用 clz() ?

我有兴趣在一组 Vulkan 计算着色器中实现特定算法。该算法在某一点使用 clz() 函数。我希望我的 NVIDIA GPU 可能会为此功能提供硬件支持;CUDA 显然使用了 clz 指令,而 clz() 也在 OpenCL 1.2 中。所以我不想写我自己的clz()。我有什么方法可以像 CUDA 或 OpenCL 那样调用函数吗?

我想我可以尝试将 OpenCL 内核编译为 SPIR-V 并在 Vulkan 中使用它,但我认为 Vulkan 不会对此感到非常高兴......?

我的另一个想法是,也许我可以将一个包含 clz() 调用的非常简单的 OpenCL 内核转换为 SPIR-V 程序集,对我的 GLSL 着色器执行相同的操作,然后手动破解 clz() 调用,因为它看起来在内核汇编代码中,进入着色器的汇编代码。但我对 SPIR-V 的细节一无所知,也不知道 Vulkan 可能对计算着色器可能使用什么样的 SPIR-V 指令施加任何限制,所以我几乎不知道这是否真的有效。

0 投票
1 回答
644 浏览

glsl - 使用 glslang 将 GLSL 编译为 SPIR-V 时控制装饰

SPIR-V 规范允许模块请求将分支展平或使用适当指令的控制装饰展开循环。这对着色器的最终性能配置文件有重大影响。但是,与 HLSL 不同,标准 GLSL 没有办法表达这一点。目的是驱动程序可以为您做出这些决定,尽管可以说只有开发人员才能拥有足够的信息来这样做。

有没有办法指定在使用 glslang 时应该如何从 GLSL 编译控制操作,还是由驱动程序来做出这些决定?我们是否仍然需要手动展开循环以确保它们不会分支?

0 投票
3 回答
1290 浏览

opengl - SPIR-V 字节码是否提供混淆?

逆向工程师可以直接将图形调试器附加到 OpenGL 应用程序以提取着色器源代码。据我了解,另一方面,Vulkan 使用 SPIR-V 字节码,而不是将明文着色器传递给图形 API。

SPIR-V 字节码是否混淆了着色器源代码,还是很容易反编译?

0 投票
0 回答
116 浏览

c++ - OpenCL2.2 SPIRV 编译器是否不检查无效代码

我刚刚使用 OpenCL C++ 的参考 clang 实现来编译规范第 13 页的源代码:

规范说有一条half突变线,这是无效的,因此我预计编译会失败。可悲的是,它编译时没有任何抱怨。

我理解错了吗?

0 投票
2 回答
16888 浏览

opencl - OpenCL、Vulkan、Sycl

我试图了解 OpenCL 生态系统以及 Vulkan 如何发挥作用。

  • 我知道 OpenCL 是一个框架,可以在 GPU 和 CPU 上执行代码,使用可以编译为 SPIR 的内核。
  • Vulkan 也可以用作使用相同 SPIR 语言的计算 API。
  • SYCL 是一种新规范,允许将 OpenCL 代码编写为符合标准的 C++14。据我了解,目前还没有该规范的免费实现。

鉴于,

  • OpenCL 与 Vulkan 有何关系?我知道 OpenCL 是更高级别的并抽象了设备,但它是否(或可以)在内部使用 Vulkan?(而不是依赖于供应商特定的驱动程序)

  • Vulkan 被宣传为计算和图形 API,但是我发现计算部分的资源很少。这是为什么 ?

  • Vulkan 比 OpenGL 具有性能优势。Vulkan vs OpenCl 是否也是如此?(可悲的是,OpenCL 比 CUDA 慢而臭名昭著。)

  • SYCL 是在内部使用 OpenCL 还是可以使用 Vulkan?或者它不使用,而是依赖于低级别的、供应商特定的 API 来实现?

0 投票
1 回答
564 浏览

opengl - 是否可以在 OpenGL 4.5 的 SPIR-V 着色器中使用无绑定纹理?

我正在尝试在 Windows 上使用 LunarG Vulkan SDK 1.0.37.0 编译以下着色器:

编译命令:

编译器给出以下输出:

警告,版本 450 尚未完成;大多数特定于版本的功能都存在,但有些缺失。

错误:assets\shader.frag:2:'#extension':不支持扩展:GL_ARB_bindless_texture

错误: assets\shader.frag:2: '#extension' : 额外的标记 -- 预期换行 错误: assets\shader.frag:2: '' : 编译终止

有没有办法在 OpenGL 4.5 和 SPIR-V 着色器中使用无绑定纹理?

0 投票
0 回答
625 浏览

c++ - 加载 SPIRV 二进制着色器失败

在我的程序中,我尝试使用 Sasha Willems 的示例代码(https://github.com/SaschaWillems/openglcpp/blob/master/SPIRVShader/main.cpp)加载预编译的二进制着色器:

我创建了以下两个简单的着色器进行测试:

测试片段

和 text.vert

我使用来自 github 的 glslangValidator 将它们转换为 SPIR-V 格式: https ://github.com/KhronosGroup/glslang 我使用了:

当我尝试加载这些着色器时,它会因在线分段错误而崩溃

我已经在另一台具有较旧 GPU(GeForce GTX 660)的 PC 上进行了相同的尝试,并且效果很好。但它不适用于我的带有 Radeon R9 Fury X 的新 PC。

有任何想法吗?