diff options
Diffstat (limited to 'source/slang/slang-emit-spirv.cpp')
| -rw-r--r-- | source/slang/slang-emit-spirv.cpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp index a5a77e148..0a755cd6d 100644 --- a/source/slang/slang-emit-spirv.cpp +++ b/source/slang/slang-emit-spirv.cpp @@ -6211,11 +6211,24 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex requireSPIRVCapability(SpvCapabilityFragmentBarycentricKHR); ensureExtensionDeclaration( UnownedStringSlice("SPV_KHR_fragment_shader_barycentric")); - return getBuiltinGlobalVar(inst->getFullType(), SpvBuiltInBaryCoordKHR, inst); - // TODO: There is also the `gl_BaryCoordNoPerspNV` builtin, which - // we ought to use if the `noperspective` modifier has been - // applied to this varying input. + auto interpolationModeDecor = + inst->findDecoration<IRInterpolationModeDecoration>(); + if (interpolationModeDecor && + interpolationModeDecor->getMode() == IRInterpolationMode::NoPerspective) + { + return getBuiltinGlobalVar( + inst->getFullType(), + SpvBuiltInBaryCoordNoPerspKHR, + inst); + } + else + { + return getBuiltinGlobalVar( + inst->getFullType(), + SpvBuiltInBaryCoordKHR, + inst); + } } else if (semanticName == "sv_cullprimitive") { |
