From 5074c4948d73b451c74bd21ac139d69eaeb390f3 Mon Sep 17 00:00:00 2001 From: davli-nv Date: Wed, 6 Aug 2025 12:29:28 -0700 Subject: Fix noperspective modifier for SV_Barycentrics in SPIRV and GLSL (#8067) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix noperspective modifier for SV_Barycentrics in SPIRV and GLSL - Added test case with both regular and noperspective SV_Barycentrics inputs 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: davli-nv * fixup format * address review https://github.com/shader-slang/slang/pull/8067#pullrequestreview-3090037501 * address review https://github.com/shader-slang/slang/pull/8067#discussion_r2255818595 * add test case from review --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: davli-nv --- source/slang/slang-emit-spirv.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'source/slang/slang-emit-spirv.cpp') 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(); + if (interpolationModeDecor && + interpolationModeDecor->getMode() == IRInterpolationMode::NoPerspective) + { + return getBuiltinGlobalVar( + inst->getFullType(), + SpvBuiltInBaryCoordNoPerspKHR, + inst); + } + else + { + return getBuiltinGlobalVar( + inst->getFullType(), + SpvBuiltInBaryCoordKHR, + inst); + } } else if (semanticName == "sv_cullprimitive") { -- cgit v1.2.3