title: Why is VkShaderStageFlagBits a bitmask?
body: <p>In Vulkan you specify the <code>VkPipelineShaderStageCreateInfo</code>'s to the <code>VkGraphicsPipelineCreateInfo</code> structure, and presumably there is supposed to be one <code>VkPipelineShaderStageCreateInfo</code> for each shader stage (for example the vertex, and fragment shaders).</p>
  <p>So why exactly is the field <code>stage</code> field of type <code>vkShaderStageFlagBits</code> is this just because it sits closer to some kind of Vulkan convention?</p>
  <p>My confusion is I am led to believe that the only reason you would use a Bitmask in this way, is if you need to combine bits together. (For example for the general <code>flags</code> field in all Vulkan structures). I was trying to find the answer for this, so I looked at the Vulkan Spec, and this confused me even more! This is because they have two bits <code>VK_SHADER_STAGE_ALL_GRAPHICS</code> and <code>VK_SHADER_STAGE_ALL</code> these are defined as:</p>
  <blockquote>
  <p>VK_SHADER_STAGE_ALL_GRAPHICS is a combination of bits used as shorthand to specify all graphics stages defined above (excluding the compute stage).</p>
  <p>VK_SHADER_STAGE_ALL is a combination of bits used as shorthand to specify all shader stages supported by the device, including all additional stages which are introduced by extensions.</p>
  </blockquote>
  <p>Well if they are supposed to be &quot;shorthand&quot; for specifying all bits, does this mean one shader stage, is supposed to be able to represent a version of all the stages?</p>
  <p>Thanks in advance!</p>