问题标签 [dxc]

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 回答
1135 浏览

shader - 在 DXIL 中运行着色器

我正在尝试使用位于此处的 Dxc 编译器运行 DirectX 12 应用程序。着色器源编译成功,但 D3D api 无法读取着色器字节码。

我正在使用 D3DCompiler DXC 桥。根据文档,我需要将其重命名为 d3dcompiler_47.dll 并将 dxcompiler.dll 和 dxil.dll 放在可执行文件旁边,以便进行正确的验证和签名。我在实验模式下运行,所以签名应该无关紧要。我还在运行应该支持 dxil 的 Windows 版本 1703。

当应用程序运行时,我可以看到 d3dcompiler_47、dxcompiler 和 dxil 都被加载到内存中,因此 D3D 运行时似乎无法将 DXIR 识别为有效的字节码格式。停!

0 投票
1 回答
367 浏览

c++ - 如何将常量缓冲区视图“完全绑定”到描述符范围?

我目前正在学习 DirectX 12 并尝试运行演示应用程序。我目前坚持使用根签名创建管道状态对象。我正在使用dxc来编译我的顶点着色器:

我的着色器看起来像这样:

现在我想为我的着色器定义一个根签名。定义看起来像这样:

最后,我将根签名与其他状态变量一起传递给管道状态对象:

但是,无论我做什么,设备都会不断抱怨根签名与顶点着色器不匹配:

D3D12 错误:ID3D12Device::CreateGraphicsPipelineState:根签名与顶点着色器不匹配:着色器 CBV 描述符范围(BaseShaderRegister=0,NumDescriptors=1,RegisterSpace=0)未完全绑定在根签名中 [STATE_CREATION 错误 #688:CREATEGRAPHICSPIPELINESTATE_VS_ROOT_SIGNATURE_MISMATCH]

D3D12:为上一条消息启用了BREAK,即:[ ERROR STATE_CREATION #688: CREATEGRAPHICSPIPELINESTATE_VS_ROOT_SIGNATURE_MISMATCH ]

我对这个错误试图告诉我什么感到困惑,因为我显然有一个常量缓冲区绑定到register(b0, space0). 或者这是否意味着我必须在创建管道状态对象之前从堆中分配一个描述符?

我还尝试在着色器本身中定义一个根签名:

[RootSignature(ShaderRootSignature)]...并使用或指定-rootsig-define "ShaderRootSignature"为 dxc编译它。然后我尝试按照这里的建议加载签名,但是两种方法都失败了,因为无法从着色器字节码中读取根签名。

非常感谢任何有关如何解释错误消息的说明,因为我真的不知道根签名中的绑定在这种情况下意味着什么。提前致谢!

0 投票
1 回答
29 浏览

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 版本?

0 投票
0 回答
22 浏览

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 的命令:

验证层错误: