From 83675103a1a4fefde11b314aed26f4d37860efe7 Mon Sep 17 00:00:00 2001 From: davli-nv Date: Tue, 5 Aug 2025 10:55:52 -0700 Subject: Implement SPV_EXT_fragment_invocation_density (SPV_NV_shading_rate) (#8037) * Implement SPV_EXT_fragment_invocation_density -Adds semantics SV_FragSize and SV_FragInvocationCount and implements them for SPIRV and GLSL using the appropriate target builtins from extensions. -Adds test case checking for expected target builtins from these semantics. -For future work, could implement SV_FragSize using pixel shader input SV_ShadingRate for HLSL, and SV_FragInvocationCount needs research. Fixes #7974 Generated with Claude Code * address review feedback https://github.com/shader-slang/slang/pull/8037#pullrequestreview-3084645845 * fixup format * review feedback https://github.com/shader-slang/slang/pull/8037#pullrequestreview-3086442819 --- source/slang/slang-emit-spirv.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (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 da2620856..a5a77e148 100644 --- a/source/slang/slang-emit-spirv.cpp +++ b/source/slang/slang-emit-spirv.cpp @@ -6226,6 +6226,23 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex SpvBuiltInCullPrimitiveEXT, inst); } + else if (semanticName == "sv_fragsize") + { + requireSPIRVCapability(SpvCapabilityFragmentDensityEXT); + ensureExtensionDeclaration( + UnownedStringSlice("SPV_EXT_fragment_invocation_density")); + return getBuiltinGlobalVar(inst->getFullType(), SpvBuiltInFragSizeEXT, inst); + } + else if (semanticName == "sv_fraginvocationcount") + { + requireSPIRVCapability(SpvCapabilityFragmentDensityEXT); + ensureExtensionDeclaration( + UnownedStringSlice("SPV_EXT_fragment_invocation_density")); + return getBuiltinGlobalVar( + inst->getFullType(), + SpvBuiltInFragInvocationCountEXT, + inst); + } else if (semanticName == "sv_shadingrate") { requireSPIRVCapability(SpvCapabilityFragmentShadingRateKHR); -- cgit v1.2.3