Как я могу получить вид шейдера (вершина / пиксель и т. Д.) Из ID3D11ShaderReflection? - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу извлечь информацию о типе программы шейдера из байтового кода шейдера.Сначала я попробовал D3D11Reflect и обнаружил структуру _D3D11_SHADER_DESC.Но я не мог определить, в каком поле хранится информация о типе программы ...

1 Ответ

0 голосов
/ 24 ноября 2018

Если вы загляните в заголовок d3d11shader.h, вы увидите, что он закодирован в поле Version в 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;
...