从 ID3D11VertexShader 或任何东西获取着色器字节码

Getting shader bytecode from ID3D11VertexShader or anything

我通常通过 D3DX11CompileFromFile 获取顶点着色器的字节码,但是有没有办法从 ID3D11VertexShader 获取字节码?或其他接口。

我尝试了其他 D3DX11Compile* 函数,例如 D3DX11CompileFromMemory、D3DX11CompileFromResource,但这些函数并非针对此问题设计的。

ID3DBlob* VertexBlob;

D3DX11CompileFromFile(Resource->GetPath(), NULL, NULL, "VS", "vs_5_0", 
D3DCOMPILE_ENABLE_STRICTNESS, 0, NULL, &VertexBlob, &ErrorBlob, &hr);

正如我所说,我通常通过 D3DX11CompileFromFile 函数初始化着色器字节码 (ID3DBlob*),但我不再使用它了。

我试图找到其他方法来解决这个问题。但是我失败了。

是否可以在不使用 D3DX11Compile* 函数的情况下获取着色器字节码?

为了创建 Direct3D 11 顶点着色器对象、像素着色器对象等,您必须提供已编译的着色器二进制文件,这是着色器 blob 包含的内容。

如果提供的已编译着色器二进制文件无效或运行时签名不正确,Direct3D 11 函数将失败。因此,二进制文件必须首先来自 HLSL Direct3D 编译器。通常这是离线完成的,然后直接从磁盘加载为二进制数据,在游戏运行时创建的二进制 blob 缓存,或者在运行时通过 Direct3D 编译从着色器源构建的旧示例中很常见API.

Note that the D3DX11Compile* functions are merely wrappers around the D3D Compile API. D3DX11 is deprecated, so you should use D3DCompile directly instead.

this blog post