【问题标题】:DirectX11 - Geometry Shader Stream Output Stream UndefinedDirectX11 - 几何着色器流输出流未定义
【发布时间】:2018-11-16 16:19:43
【问题描述】:

我正在尝试创建一个几何着色器,它使用流输出阶段遵循 MSDN 上提供的大纲:Link

但是,当我尝试这样做时,我收到以下错误:

ID3D11Device::CreateGeometryShaderWithStreamOutput: Stream (=3435973836) must be less than or equal to 3.

据我所知,我可以定义流的唯一点是在流输出声明条目中,但我已经这样做了(下面的代码)。

// Reads compiled shader into a buffer
HRESULT result = D3DReadFileToBlob(filename, &geometryShaderBuffer);

D3D11_SO_DECLARATION_ENTRY SODeclarationEntry[3] =
{

    { 0, "POSITION", 0, 0, 3, 0 },
    { 0, "NORMAL", 0, 0, 3, 0 },
    { 0, "TEXCOORD", 0, 0, 3, 0 }

};

// Create the geometry shader from the buffer & SO declaration
result = renderer->CreateGeometryShaderWithStreamOutput(geometryShaderBuffer->GetBufferPointer(), geometryShaderBuffer->GetBufferSize(), SODeclarationEntry, sizeof(SODeclarationEntry),
        NULL, 0, 0, NULL, &streamOutputGeometryShader);

我应该在其他地方定义输出流吗?

【问题讨论】:

    标签: c++ directx hlsl


    【解决方案1】:

    这里的问题是您为NumEntries 提供了太大的数字,因此它在您为pSODeclaration 定义的3 之后读取了一堆垃圾条目。这就是验证错误调试输出报告诸如“Stream (=3435973836)”之类的无意义值的原因。

    result = renderer->CreateGeometryShaderWithStreamOutput(
        geometryShaderBuffer->GetBufferPointer(), geometryShaderBuffer->GetBufferSize(),
        SODeclarationEntry, sizeof(SODeclarationEntry),
        nullptr, 0, 0, nullptr, &streamOutputGeometryShader);
    

    应该是:

    result = renderer->CreateGeometryShaderWithStreamOutput(
        geometryShaderBuffer->GetBufferPointer(), geometryShaderBuffer->GetBufferSize(),
        SODeclarationEntry, _countof(SODeclarationEntry),
        nullptr, 0, 0, nullptr, &streamOutputGeometryShader);
    

    请注意,如果您使用的编译器与 Microsoft Visual C++ 不同,_countof 是:

    #define _countof(array) (sizeof(array) / sizeof(array[0]))
    

    顺便说一句,这是静态代码分析 (/analyze) 和用于 Windows 系统标头的 SAL 注释可以为您找到的那种错误:

    warning C6385: Reading invalid data from 'SODeclarationEntry':  the readable
    size is '48' bytes, but '768' bytes may be read.
    

    更多信息请参见Microsoft Docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多