Giovanni Mascellani (@giomasce) commented about include/vkd3d_shader.h:
- For shader model 3 pixel position inputs (i.e. VPOS, but not POSITION),
it is set to VKD3D_SHADER_SV_POSITION.
- For shader model 3 face inputs (i.e. VFACE), it is set to
VKD3D_SHADER_SV_IS_FRONT_FACE.
- For all other elements, it is set to VKD3D_SHADER_SV_NONE.
- The \ref vkd3d_shader_signature_element.component_type field is always set
- to VKD3D_SHADER_COMPONENT_FLOAT.
- The \ref vkd3d_shader_signature_element.register_index field is set to the
- bytecode register index.
- Note that for shader model 1 and 2 shaders (excepting vertex shader
- inputs), the register index of colour and texture coordinate registers will
- be equal to the usage index, and hence may not be unique.
- The \ref vkd3d_shader_signature_element.mask field is set to the mask given
- in the DCL instruction, if one is present. If there is no DCL instruction
- for this semantic, it is set to the same value as the \ref used_mask field.
- For the scalar registers vFace, oDepth, oFog, and oPts, it is always 1.
It seems that the program does something slightly different: it ORs together all the masks, including the one in the DCL. Which probably usually coincides with what you say, given that hopefully the DCL mask is a subset of any other, but I guess there might be exceptions.
I don't know if it makes sense to be precise about this kind of things, so feel free to ignore this. I just noticed this fact, so I wanted to mention it.