问题标签 [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.
vulkan - 如何将 SPIR-V Private 存储限定矩阵数组复制到 Function 存储限定矩阵数组?
我正在与驱动程序错误作斗争,长话短说,我在调用级全局内存中创建了具有适当数据的 OpVariables,也就是 float4x3 [6] 类型的私有存储限定 OpVariable。
现在,我需要将此数据转换为函数存储限定符,作为 OpFunction 范围内的 OpVariables。但是我有点迷茫我什么时候应用什么复制操作,尤其是矩阵和数组,我同时拥有两者。我只是 OpLoad 和 OpStore 吗?或者我是否需要 OpLoad、OpCompositeExtract 从索引中提取每个矩阵、从它们中提取 OpCompositeConstruct,然后才需要 OpStore?关于该主题的 SPIR-V 规范相当密集,我似乎找不到描述复制操作的地方。这些规则可能分散在整个规范中。
glsl - 我什么时候需要 GL_EXT_nonuniform_qualifier?
我想将以下代码编译成 SPIR-V
(代码是由我正在开发的程序生成的,这就是为什么代码看起来有点奇怪,但它应该让问题变得清晰)
当尝试这样做时,我被告知
(对于纹理查找也发生的倒数第三行)
在我围绕如何指定动态统一以及着色语言规范进行了大量讨论之后,基本上说范围是由 API 指定的,而 OpenGL 和 Vulkan 都没有真正这样做(也许改变了),我很困惑为什么我会得到那个错误。
最初我想为索引使用实例化的顶点属性,但是那些不是动态统一的,这就是我认为 PushConstants 应该是的。
因此,当在绘制调用期间 PushConstants 保持不变时(这是动态统一要求的最大范围),上述着色器如何以任何动态非统一状态结束?
编辑:这是否与支持“ColorMap”存储的缓冲区可能被另一个缓冲区别名的事实有关,在调用期间可以通过该缓冲区修改内容?或者有没有办法告诉编译器这是一个“受限”存储,所以它知道它是常量?
谢谢
android - 无法在 Android Studio 中使用 Vulkan 子组操作
我正在 Android Studio 中编写 Vulkan 计算着色器并在 Android 手机上启动它。我遇到的问题是下一个 - 我不能使用任何子组操作,比如subgroupAdd
and subgroupElect
。当我尝试使用这些功能时,出现如下错误:
reduce_vec.comp:35: error: 'subgroup op' : requires SPIR-V 1.3
我已经检查过 - 我的 Android 手机支持子组,并且我的着色器接受这样的扩展:
问题非常简单,我需要更新我的 SPIR-V。但根据我的发现,Android studio 自带的 SPIR-V 并不是我可以轻易更新的。
以前有人遇到过类似的问题吗?你的解决方案是什么?提前致谢!
visual-studio - 如何禁用 Visual Studio 2019 的内置 HLSL 编译器
这个话题听起来像是一个重复的问题,但我的问题是我的项目中没有包含任何 HLSL 文件。因此,我不能手动禁用/更改 dxc 编译器。不过,我添加了一个使用 CMake 的预构建命令来从 HLSL 文件生成 SPIR-V。编译项目时出现以下错误:
dxc 失败:SPIR-V CodeGen 不可用。请使用 -DENABLE_SPIRV_CODEGEN=ON 重新编译。
这意味着 Visual Studio 使用不支持 SPIR-V CodeGen 的内置 dxc。如何使用 CMake 明确告知要使用哪个 dxc 版本?
c++ - 如何在编译时映射着色器输入
我正在使用以下预处理器黑客
所以我可以从源代码中提取正确的输入。输入定义如下:
还有一个着色器模块(这里是顶点着色器):
然后分两步编译着色器:
虽然这种方法有效,但它有一些局限性:
不可能对所有输入使用单个顶点缓冲区(无法生成正确的结构以从 c++ 端使用)
由于与 (1) 类似的原因,可能不适用于统一缓冲区。
是否有任何其他选项可以保证在编译时正确绑定(即:绑定应该具有正确的类型,并且必须连接所有输入)。目前,我使用以下函数来绑定缓冲区:
ShaderDescriptor
由预处理器生成。
opencl - 编译为 SPIR-V 的 OpenCL .cl 文件可以交叉编译为 Metal 吗?
就上下文而言,我正在研究对我们工作中的 OpenCL 代码的升级,因为我们远远落后于当前规范。我工作的团队在所有三个主要操作系统上进行开发,据我所知,Apple 的任何机器都不支持过去的 OpenCL 1.2,而是提示您学习和使用 Metal 性能着色器。我想将我们的代码库更新为基于 OpenCL 2.0 或 3.0 的 OpenCL 的 C++,具体取决于您使用的版本。用于 OpenCL 的 C++ 在 Windows 和 Linux 上很好,因为它们的 GPU 驱动程序支持并超过 2.0 要求,但如果没有驱动程序的官方支持,Mac 可能会遇到问题。所以我的想法是,如果我们可以为 Mac 用户将 CL 内核交叉编译为 Metal,他们将能够在本地运行代码的 Metal 版本。
有没有人对这个问题有任何解决方案。
llvm - SPIR-V 和 LLVM-IR 之间最根本的区别是什么?
Spir-v 和 LLVM IR 具有相同的粒度,可以相互转换。请问为什么 SPir-V 仍然如此受 LLVM IR 的欢迎?两者的根本区别?
vulkan - 使用 DirectxShaderCompiler 生成带有 -fvk-use-scalar-layout 标志的 SPIR-V 会导致验证层错误
我有一个相当简单的 HLSL 着色器,它正在使用 DirectxShaderCompiler 编译成 SPIR-V。但是,使用标量布局会导致验证层错误。我VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME
在创建 VkDevice 时启用了扩展。它是一个验证层,还是 dxc 错误,还是我需要一个额外的标志来生成 SPIR-V?
生成 SPIR-V 的命令:
验证层错误: