【问题标题】:SharpDX - fxc.exe error when compiling hlsl fileSharpDX - 编译 hlsl 文件时出现 fxc.exe 错误
【发布时间】:2018-01-22 14:13:11
【问题描述】:

我开始学习 SharpDX 和 C# 的全息模板。

在编译项目时,我在编译着色器文件时出错。

var vertexShaderByteCode = ShaderBytecode.CompileFromFile("Content/Shaders/VertexSharderShared.hlsl", "VS", "vs_5_0", ShaderFlags.Debug);

fxc.exe 以代码 1 退出。

在示例中,他们在将着色器加载到字节码中时使用了一些 .cso 文件: code img

由于我不太了解 .cso 来自何处以及 Vprt 是什么,我更喜欢直接加载 hlsl 文件。我正在使用 SharpDX 3.0.2、SharpDX.Direct3D11 3.0.2 和 SharpDX.D3DCompiler 3.0.2。

谢谢!

【问题讨论】:

  • 那些是编译着色器。 fxc 是一个 HLSL 编译器,您也可以通过命令行执行它。你用的是什么版本的VS? VS 应该在编译你的项目时自动编译你的着色器
  • @Asesh 感谢您的回复。我正在使用 VS2017 并在 Hololens 模拟器上进行测试。我刚刚明白我必须指定编译着色器(.cso 文件)的位置。我尝试了这么多不同的 URI,终于找到了正确的,但它总是返回空我的变量 (vertexShaderByteCode) 的字节码值
  • 好吧,如果你看看这个源代码:github.com/sharpdx/SharpDX/blob/master/Source/…ShaderBytecode.CompileFromFile: Compiles a shader or effect from a file on disk 所以你使用了错误的方法,因为 cso 已经是一个编译的着色器
  • 还有CompilationResultShaderBytecode.CompileFromFile的返回值,不是shader字节码
  • 您的着色器可能有问题:Content/Shaders/VertexSharderShared.hlsl。你应该在这里发布它的源代码

标签: c# directx hlsl vertex-shader sharpdx


【解决方案1】:

需要加载 CSO 文件,然后创建相关的着色器。下面是我用来加载着色器的函数示例。请注意,在此示例中,您应该保留字节码以及顶点着色器。

Helper 函数是我的跨 uwp/mfc 包装器,但它基本上是在内存中的数据流中返回文件。

CSO 文件是字节码,您需要将其附加到正确的 Sharpdx.Direct3D11 着色器类中。

字节码还用于引用语义接口(仅适用于顶点缓冲区)。一旦你创建了它,你的绘图调用就可以将数据与它关联的 GPU 寄存器进行匹配。但是下面的代码至少会加载你的 CSO 文件并创建顶点着色器。

祝你好运。

         using (Stream fileStream = Helper.GetFileStream(a_fileName, a_filePath))
        {
            a_byteCode = new D3DCompiler.ShaderBytecode(fileStream);

            if (a_byteCode != null)
            {
                a_child = new D3D11.VertexShader(a_device, a_byteCode)
                {
                    DebugName = "a_fileName"
                };
            }
            else
            {
                throw new Exception("Unable to load file: " + a_fileName);
            }

        }

【讨论】:

  • 是的,这与全息模板中使用的架构非常相似。我当时不明白 hlsl 文件会在我们编译项目的同时编译成 .cso。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2020-09-11
  • 2018-04-04
相关资源
最近更新 更多