如何从ID3D11ShaderReflection获取着色器种类(顶点/像素等)?

如何从ID3D11ShaderReflection获取着色器种类(顶点/像素等)?,shader,direct3d,direct3d11,Shader,Direct3d,Direct3d11,我想从着色器字节码中提取着色器程序类型信息。我首先尝试了D3D11 reflect,找到了\u D3D11\u SHADER\u DESC结构。但我无法确定哪个字段存储程序类型信息…如果查看d3d11shader.h标题,您将看到它被编码到16位大写的版本字段中: typedef enum D3D11_SHADER_VERSION_TYPE { D3D11_SHVER_PIXEL_SHADER = 0, D3D11_SHVER_VERTEX_SHADER = 1,

我想从着色器字节码中提取着色器程序类型信息。我首先尝试了
D3D11 reflect
,找到了
\u D3D11\u SHADER\u DESC
结构。但我无法确定哪个字段存储程序类型信息…

如果查看
d3d11shader.h
标题,您将看到它被编码到16位大写的版本字段中:

typedef enum D3D11_SHADER_VERSION_TYPE
{
    D3D11_SHVER_PIXEL_SHADER    = 0,
    D3D11_SHVER_VERTEX_SHADER   = 1,
    D3D11_SHVER_GEOMETRY_SHADER = 2,

    // D3D11 Shaders
    D3D11_SHVER_HULL_SHADER     = 3,
    D3D11_SHVER_DOMAIN_SHADER   = 4,
    D3D11_SHVER_COMPUTE_SHADER  = 5,

    D3D11_SHVER_RESERVED0       = 0xFFF0,
} D3D11_SHADER_VERSION_TYPE;

#define D3D11_SHVER_GET_TYPE(_Version) \
(((_Version) >> 16) & 0xffff)
#define D3D11_SHVER_GET_MAJOR(_Version) \
(((_Version) >> 4) & 0xf)
#define D3D11_SHVER_GET_MINOR(_Version) \
(((_Version) >> 0) & 0xf)

typedef struct _D3D11_SHADER_DESC
{
    UINT    Version;  // Shader version
    ...
}  D3D11_SIGNATURE_PARAMETER_DESC;

如果查看
d3d11shader.h
标题,您将看到它被编码到16位高位字的版本字段中:

typedef enum D3D11_SHADER_VERSION_TYPE
{
    D3D11_SHVER_PIXEL_SHADER    = 0,
    D3D11_SHVER_VERTEX_SHADER   = 1,
    D3D11_SHVER_GEOMETRY_SHADER = 2,

    // D3D11 Shaders
    D3D11_SHVER_HULL_SHADER     = 3,
    D3D11_SHVER_DOMAIN_SHADER   = 4,
    D3D11_SHVER_COMPUTE_SHADER  = 5,

    D3D11_SHVER_RESERVED0       = 0xFFF0,
} D3D11_SHADER_VERSION_TYPE;

#define D3D11_SHVER_GET_TYPE(_Version) \
(((_Version) >> 16) & 0xffff)
#define D3D11_SHVER_GET_MAJOR(_Version) \
(((_Version) >> 4) & 0xf)
#define D3D11_SHVER_GET_MINOR(_Version) \
(((_Version) >> 0) & 0xf)

typedef struct _D3D11_SHADER_DESC
{
    UINT    Version;  // Shader version
    ...
}  D3D11_SIGNATURE_PARAMETER_DESC;