gpt4 book ai didi

vulkan - SPIR-V 着色器在运行时导致验证错误

转载 作者:行者123 更新时间:2023-12-01 15:04:29 28 4
gpt4 key购买 nike

我有一个计算着色器:

#version 450
#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_gpu_shader_int64 : enable

layout(local_size_x_id = 0) in;

layout(set = 0, binding = 0) buffer Foo {
u64vec2[256] scratchpad;
} foo;

layout(set = 0, binding = 1) uniform Bar {
u64vec2 a;
u64vec2 b;
} bar;

void main() {
int foobar = 0;
int baz = 0;
}

我使用 LunarG SDK 1.0.65.0 中的 glslangValidator 编译了它,并使用 spirv-val 检查了它,它没有返回任何内容。我在创建 VkDevice 时启用了 shaderInt64。使用 vkCreateShaderModule 加载此着色器时,出现此验证错误:

SPIR-V 模块无效:无效指令字数:0

当我执行以下任一操作时,验证错误消失了:

  • 删除 64 位扩展并将所有类型更改为 int
  • 删除 FooBar 缓冲区
  • 删除 main 中的任一变量>
  • 在中移除layout(local_size_x_id = 0)



我的问题是,这是编译器或验证层中的错误,还是我错误地使用了这些功能之一?






最佳答案





如果您在运行时从文件加载 SPIR-V,则必须以二进制模式打开文件(例如 C++ 中的 std::ifstream::binary)。否则,您的二进制文件在加载时可能会发生变化(即通常运行时会尝试根据其运行的平台切换换行符)。



或者,您可以将着色器静态加载(通过 #include)作为 C++ 内联文件。您可以通过 glslc -mfmt=cglslangValidator -V -x --vn variable_name 创建此类文件。








关于vulkan - SPIR-V 着色器在运行时导致验证错误,我们在Stack Overflow上找到一个类似的问题:

https://stackoverflow.com/questions/47359106/




28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com