问题标签 [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 投票
1 回答
107 浏览

hlsl - 升级到 LunarG SDK 1.0.68.0 后 InterlockedMax 出现 SPIR-V 错误

我的计算着色器(用 HLSL 编写)编译并使用早期的 SDK 1.0.65.0。我更新到 1.0.68.0 并重新编译它,现在调用时出现此错误vkCreateShaderModule

Vulkan 错误:[SC],代码:5:SPIR-V 模块无效:AtomicSMax:预期结果类型为 int 标量类型

我验证了错误来自我的着色器中的这个函数:

我用这个命令编译着色器:

如果我不使用这些Interlocked*方法,错误就会消失。我也尝试使用ints 而不是uints 但问题仍然存在。我做错了什么或者这可能是一个代码生成错误?

0 投票
1 回答
253 浏览

glsl - 查询 SPIR-V 着色器中是否存在 GLSL 扩展

在常规 GLSL 中,我可以执行以下操作来有条件地启用 GLSL 扩展:

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

0 投票
0 回答
74 浏览

struct - 尝试使用统一结构作为函数参数时出现 SPIR-V 编译器错误

上面的 GLSL 代码会导致以下 SPIR-V 编译器错误:

该错误来自main中的get_value函数调用。每当我尝试将结构实例作为函数参数传递时,如果该实例是统一的一部分(在本例中为 u_test),就会发生错误。如果该结构不是制服的一部分,则可以正常编译。

为什么这是一个问题,我能做些什么来解决它?

0 投票
1 回答
5713 浏览

opengl - 为什么我们需要 SPIR-V?

我一直在阅读有关异构计算的内容并遇到了SPIR-V。在那里我发现了以下内容:

SPIR-V 是第一个用于本地表示并行计算和图形的开放标准、跨 API 中间语言。

这张图片中我可以看到所有高级语言,如 GLSL、HLSL、OpenCL C 等,都被编译成 SPIR-V,并以这种方式传递给正确的物理设备以执行。

我的问题是为什么我们需要将我们的着色器/内核代码编译为 SPIR-V,而不是将其直接编译为将由所选物理设备执行的机器指令?如果这个问题不正确,您能否解释一下我们为什么需要 SPIR-V?

0 投票
1 回答
2199 浏览

floating-point - 如何使用 Vulkan 在现代 GLSL 中获得 16 位浮点数?

似乎在某个时间点,Nvidia 有一个扩展允许OpenGL 1.1的半浮点值,但显然从那时起*世界一半已在某个时候被现代 GLSL 规范回收。

今天我可以在 CUDA 中使用 16 位浮点值没问题,NVIDIA 支持 16 位浮点数的硬件应该没有问题,而且它们似乎在 HLSL 中支持它们,甚至在 HLSL 交叉编译中支持它们似乎是矛盾的SPIR-V 而 GLSL 不适用于 Nvidia。似乎 SPIR-V 具有支持 16 位浮点所需的所有原语,无论使用主扩展(KHR),因此似乎没有理由禁止我使用它们。

我不确定为什么,尽管有 Nvidia 卡,但我不能利用 16 位浮点运算,而且如果我想利用它,显然被迫使用 AMD或完全切换 API。肯定有某种方法可以为两者实际使用真正的 16 位浮点值吗?

我不是在询问主机到设备分配的缓冲区(IE 顶点缓冲区)。是的,您可以将它们分配为带有 KHR 扩展的 16 位浮点数,并且没有太大问题,但在实际着色器中,使用 16 位浮点数,而不是强制转换为 32 位浮点数的 16 位浮点数是我担心的。

0 投票
1 回答
386 浏览

bytecode - 为什么 SPIR-V 使用“4 字节”代码或“字代码”?

据我了解,根据 SPIR-V 1.3 规范,所有指令均以 4 字节字分段。这与传统的字节码 IR 语言(如 Python 字节码和 Java 的 JVM 字节码)不同,如果我正确地理解字面意义上的将操作分割为单个字节的话。我什至听过人们不经意地谈论这特别是一件好事(“文字代码”),但从未详细说明原因。为什么 Khronos 集团决定沿着这条路线进行其 SPIR-V 定义,而不是使用单字节格式或其他任意大小?

0 投票
1 回答
8059 浏览

gpgpu - 如何在 Linux 中获取已安装的 Vulkan API 版本?

2018-03-07,新版API(Vulkan 1.1)发布。

我想知道:

  1. 哪个控制台命令可以显示当前安装的 API 版本。
  1. 如何以编程方式确定 C# 语言中的相同事物。
0 投票
1 回答
771 浏览

glsl - Vulkan SSBO 顶点着色器的 vertexPipelineStoresAndAtomics 警告

我想vec3在我的顶点着色器中使用一个数组。我建立

我的 GLSL 中的布局并将glslc其转移到我的 SPIR-V 中,它有它的NonWriteable操作码。我做了所有 CPU 方面的工作,使用描述符集和所有设置它。数据似乎正确通过,但我通过验证层收到此警告

然后对其进行更多研究,我意识到这vertexPipelineStoresAndAtomics只是供非计算着色器写入,但我只读取数据,所以不确定它为什么对我大喊大叫。此外,它似乎仍在工作,所以这是一个假阴性错误还是我做错了什么?

0 投票
0 回答
283 浏览

opengl - 在 OpenGL 中加载 SPIR-V 失败

我正在使用带有 NVIDIA 驱动程序 384.111 的 Ubuntu 16.4,我遇到了与此类似的问题

我以与链接讨论中所述相同的方式将最小的 GLSL 顶点着色器(一个输入和一个空的主函数)编译到 SPIR-V。当我加载并专门化它时,专门化不成功,信息日志只包含随机数据。

我决定发布这个问题,因为链接评论中引用的讨论不再存在并且已经超过一年了。我在此处或 NVIDIA 开发论坛上找不到任何其他关于此问题的参考资料。

是否有任何错误可以合法地产生损坏的信息日志,或者这是驱动程序错误?不知何故,这个问题似乎不太可能已经存在一年多而没有人讨论过。

我的 GLSL 着色器如下所示:

我使用以下命令将代码编译为 SPIR-V:

./glslangValidator -G quad.vert -o quad.vert.spv

以下代码加载着色器:

0 投票
1 回答
266 浏览

vulkan - What are the alignment rules for a dynamic arrays in SPIR-V with std430?

The spec says

[140] An array has a base alignment equal to the base alignment of its element type, rounded up to a multiple of 16. .... [430] except for array and structure base alignment which do not need to be rounded up to a multiple of 16.

I assume the size for a static array is trivially size_of(elem_type) * length but what about a dynamic array?

There are no pointers in the logical mode, does that mean the size of a dynamic array is 0?

I don't know which offsets I should apply to the following struct

Or in SPIR-V notation

Can this be done, or do the same rules of GLSL apply here where you are only allowed to have exactly one dynamic array inside a buffer block, and it has to be the last one?