1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-27 04:54:15 +01:00

[d3d11] Rework DXBC shader stage to Vulkan shader stage mapping

We're going to have to do this at runtime, so this needs to be fast.
This commit is contained in:
Philip Rebohle 2025-02-18 01:10:49 +01:00 committed by Philip Rebohle
parent 6080e6d24d
commit be61341178

View File

@ -52,15 +52,15 @@ namespace dxvk {
* \returns Corresponding Vulkan shader stage * \returns Corresponding Vulkan shader stage
*/ */
constexpr VkShaderStageFlagBits GetShaderStage(DxbcProgramType ProgramType) { constexpr VkShaderStageFlagBits GetShaderStage(DxbcProgramType ProgramType) {
switch (ProgramType) { constexpr uint64_t lut
case DxbcProgramType::VertexShader: return VK_SHADER_STAGE_VERTEX_BIT; = (uint64_t(VK_SHADER_STAGE_VERTEX_BIT) << (8u * uint32_t(DxbcProgramType::VertexShader)))
case DxbcProgramType::HullShader: return VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT; | (uint64_t(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) << (8u * uint32_t(DxbcProgramType::HullShader)))
case DxbcProgramType::DomainShader: return VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT; | (uint64_t(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) << (8u * uint32_t(DxbcProgramType::DomainShader)))
case DxbcProgramType::GeometryShader: return VK_SHADER_STAGE_GEOMETRY_BIT; | (uint64_t(VK_SHADER_STAGE_GEOMETRY_BIT) << (8u * uint32_t(DxbcProgramType::GeometryShader)))
case DxbcProgramType::PixelShader: return VK_SHADER_STAGE_FRAGMENT_BIT; | (uint64_t(VK_SHADER_STAGE_FRAGMENT_BIT) << (8u * uint32_t(DxbcProgramType::PixelShader)))
case DxbcProgramType::ComputeShader: return VK_SHADER_STAGE_COMPUTE_BIT; | (uint64_t(VK_SHADER_STAGE_COMPUTE_BIT) << (8u * uint32_t(DxbcProgramType::ComputeShader)));
default: return VkShaderStageFlagBits(0);
} return VkShaderStageFlagBits((lut >> (8u * uint32_t(ProgramType))) & 0xff);
} }
} }