ID3D11Device::CreateGeometryShader 方法 (d3d11.h)
创建几何着色器。
语法
HRESULT CreateGeometryShader(
[in] const void *pShaderBytecode,
[in] SIZE_T BytecodeLength,
[in, optional] ID3D11ClassLinkage *pClassLinkage,
[out, optional] ID3D11GeometryShader **ppGeometryShader
);
参数
[in] pShaderBytecode
类型: const void*
指向已编译着色器的指针。
[in] BytecodeLength
类型: SIZE_T
已编译的几何着色器的大小。
[in, optional] pClassLinkage
类型: ID3D11ClassLinkage*
指向类链接接口的指针 (请参阅 ID3D11ClassLinkage) ;值可以为 NULL。
[out, optional] ppGeometryShader
类型: ID3D11GeometryShader**
指向 ID3D11GeometryShader 接口的指针的地址。 如果为 NULL,则将验证所有其他参数,如果所有参数都通过验证,则此 API 将返回S_FALSE而不是S_OK。
返回值
类型: HRESULT
此方法返回以下 Direct3D 11 返回代码之一。
注解
创建后,可以通过调用 ID3D11DeviceContext::GSSetShader 将着色器设置为设备。
从 Windows 8 开始提供的 Direct3D 11.1 运行时为 CreateGeometryShader 提供以下新功能。
以下着色器模型 5.0 指令仅适用于 Direct3D 11.0 运行时中的像素着色器和计算着色器。 对于 Direct3D 11.1 运行时,由于无序访问视图 (UAV) 在所有着色器阶段都可用,因此你可以在所有着色器阶段使用这些说明。
因此,如果在几何着色器中使用以下着色器模型 5.0 指令,则可以将编译的几何着色器成功传递到 pShaderBytecode。 也就是说,对 CreateGeometryShader 的 调用成功。
如果将编译的着色器传递给 pShaderBytecode,而 pShaderBytecode 在每个着色器阶段都不支持 UAV 的设备上使用以下任何说明, (包括未实现以支持每个着色器阶段) UAV 的现有驱动程序, 则 CreateGeometryShader 将失败。 如果着色器尝试使用超出硬件支持的 UAV 插槽集的 UAV 槽,CreateGeometryShader 也会失败。
- dcl_uav_typed
- dcl_uav_raw
- dcl_uav_structured
- ld_raw
- ld_structured
- ld_uav_typed
- store_raw
- store_structured
- store_uav_typed
- sync_uglobal
- 例如,所有原子和直接原子 (, 例如atomic_and 和 imm_atomic_and)
示例
用法示例
ID3D11GeometryShader* g_pGeometryShader11 = NULL;
ID3DBlob* pGeometryShaderBuffer = NULL;
ID3DBlob * errorbuffer = NULL;
D3DX11CompileFromFile( str, NULL, NULL, "GS", "gs_4_0", dwShaderFlags, 0, NULL,
&pGeometryShaderBuffer, &errorbuffer, NULL );
pd3dDevice->CreateGeometryShader( pGeometryShaderBuffer->GetBufferPointer(),
pGeometryShaderBuffer->GetBufferSize(), NULL, &g_pGeometryShader11 );
要求
目标平台 | Windows |
标头 | d3d11.h |
Library | D3D11.lib |