diff --git a/spirv_hlsl.cpp b/spirv_hlsl.cpp index 46fc1768..031b4d44 100644 --- a/spirv_hlsl.cpp +++ b/spirv_hlsl.cpp @@ -783,6 +783,9 @@ void CompilerHLSL::emit_builtin_inputs_in_struct() break; case BuiltInPrimitiveId: + if (legacy) + SPIRV_CROSS_THROW("Primitive ID not supported in SM 3.0 or lower."); + type = "uint"; semantic = "SV_PrimitiveID"; break; @@ -830,8 +833,16 @@ void CompilerHLSL::emit_builtin_inputs_in_struct() break; case BuiltInFrontFacing: - type = "bool"; - semantic = "SV_IsFrontFace"; + if (legacy) + { + type = "float"; + semantic = "VFACE"; + } + else + { + type = "bool"; + semantic = "SV_IsFrontFace"; + } break; case BuiltInViewIndex: @@ -3146,6 +3157,20 @@ void CompilerHLSL::emit_hlsl_entry_point() } break; + + + case BuiltInFrontFacing: + { + if (legacy) + statement(builtin, " = bool(stage_input.", builtin, " > 0.0 ? true : false);"); + else + { + statement(builtin, " = int(stage_input.", builtin, ");"); + } + break; + } + + case BuiltInVertexId: case BuiltInVertexIndex: case BuiltInInstanceIndex: