ID3D11Device::CreateGeometryShaderWithStreamOutput 方法 (d3d11.h)

创建可写入流式输出缓冲区的几何图形着色器。

语法

HRESULT CreateGeometryShaderWithStreamOutput(
  [in]            const void                       *pShaderBytecode,
  [in]            SIZE_T                           BytecodeLength,
  [in, optional]  const D3D11_SO_DECLARATION_ENTRY *pSODeclaration,
  [in]            UINT                             NumEntries,
  [in, optional]  const UINT                       *pBufferStrides,
  [in]            UINT                             NumStrides,
  [in]            UINT                             RasterizedStream,
  [in, optional]  ID3D11ClassLinkage               *pClassLinkage,
  [out, optional] ID3D11GeometryShader             **ppGeometryShader
);

参数

[in] pShaderBytecode

类型:const void*

指向标准几何着色器以及流输出的已编译几何着色器的指针。 有关如何获取此指针的信息,请参阅 获取指向已编译着色器的指针

若要在不使用几何着色器的情况下创建流输出,请将指针传递给上一阶段的输出签名。 若要获取此输出签名,请调用 D3DGetOutputSignatureBlob 编译器函数。 还可以将指针传递给上一阶段的已编译着色器(例如,顶点着色器阶段域着色器阶段)。 此编译的着色器为数据提供输出签名。

[in] BytecodeLength

类型:SIZE_T

已编译的几何着色器的大小。

[in, optional] pSODeclaration

类型:const D3D11_SO_DECLARATION_ENTRY*

指向 D3D11_SO_DECLARATION_ENTRY 数组的指针。 如果 NumEntries > 0,则无法 NULL

[in] NumEntries

类型:UINT

流输出声明中的条目数(范围为 0 到 D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT)。

[in, optional] pBufferStrides

类型:const UINT*

缓冲区步幅数组;每个步幅是该缓冲区的元素的大小。

[in] NumStrides

类型:UINT

pBufferStrides 中的步幅(或缓冲区)数(范围为 0 到 D3D11_SO_BUFFER_SLOT_COUNT)。

[in] RasterizedStream

类型:UINT

要发送到光栅器阶段的流的索引号(范围为 0 到 D3D11_SO_STREAM_COUNT - 1)。 如果未对流进行光栅化,则设置为D3D11_SO_NO_RASTERIZED_STREAM。

[in, optional] pClassLinkage

类型:ID3D11ClassLinkage*

指向类链接接口的指针(请参阅 ID3D11ClassLinkage);该值可以 NULL

[out, optional] ppGeometryShader

类型:ID3D11GeometryShader**

指向 ID3D11GeometryShader 接口的指针的地址,表示创建的几何着色器。 将此设置为 NULL 来验证其他参数;如果验证通过,该方法将返回S_FALSE而不是S_OK。

返回值

类型:HRESULT

此方法返回 Direct3D 11 返回代码之一。

言论

有关使用 CreateGeometryShaderWithStreamOutput的详细信息,请参阅 使用流输出创建 Geometry-Shader 对象。

Direct3D 11.1 运行时从 Windows 8 开始提供以下新功能,用于 CreateGeometryShaderWithStreamOutput

以下着色器模型 5.0 指令仅适用于 Direct3D 11.0 运行时中的像素着色器和计算着色器。 对于 Direct3D 11.1 运行时,由于所有着色器阶段都提供了无序访问视图(UAV),因此可以在所有着色器阶段使用这些说明。

因此,如果在几何着色器中使用以下着色器模型 5.0 指令,则可以成功将编译的几何着色器传递给 pShaderBytecode 。 也就是说,调用 CreateGeometryShaderWithStreamOutput 成功。

如果将已编译的着色器传递给 pShaderBytecode,该着色器在每台着色器阶段不支持 UAV 的设备上使用以下任何说明(包括未实现以支持每个着色器阶段的 UAV 的现有驱动程序),CreateGeometryShaderWithStreamOutput 失败。 如果着色器尝试使用 UAV 槽超出硬件支持的 UAV 槽集,则 createGeometryShaderWithStreamOutput 也失败。

Windows Phone 8: 此 API 受支持。

要求

要求 价值
目标平台 窗户
标头 d3d11.h
D3D11.lib

另请参阅

ID3D11Device