summaryrefslogtreecommitdiffstats
path: root/source/slang
diff options
context:
space:
mode:
authorJames Helferty (NVIDIA) <jhelferty@nvidia.com>2025-08-13 13:45:44 -0700
committerGitHub <noreply@github.com>2025-08-13 20:45:44 +0000
commit90a9515fcbc7e362c05341c2ca65fbe78bc1106a (patch)
treed23660b611a869e4fb5b6e1e49a6165893aca6d4 /source/slang
parent80b46bd2124b3ead963ae977fef3d010049beb9a (diff)
Handle SV_Barycentrics on metal (#8163)
Fixes #6785
Diffstat (limited to 'source/slang')
-rw-r--r--source/slang/slang-capabilities.capdef2
-rw-r--r--source/slang/slang-ir-legalize-varying-params.cpp8
-rw-r--r--source/slang/slang-ir-legalize-varying-params.h1
3 files changed, 10 insertions, 1 deletions
diff --git a/source/slang/slang-capabilities.capdef b/source/slang/slang-capabilities.capdef
index 95f1335da..afad1b984 100644
--- a/source/slang/slang-capabilities.capdef
+++ b/source/slang/slang-capabilities.capdef
@@ -1181,7 +1181,7 @@ alias atomicfloat = GL_EXT_shader_atomic_float | _sm_6_0 + hlsl_nvapi | cpp | cu
alias atomicfloat2 = GL_EXT_shader_atomic_float2 | _sm_6_6 + hlsl_nvapi | cpp | cuda;
/// Capabilities needed to use fragment-shader-barycentric's
/// [Compound]
-alias fragmentshaderbarycentric = GL_EXT_fragment_shader_barycentric | _sm_6_1;
+alias fragmentshaderbarycentric = GL_EXT_fragment_shader_barycentric | _sm_6_1 | metal;
/// (gfx targets) Capabilities needed to use memory barriers
/// [Compound]
alias shadermemorycontrol = glsl | _spirv_1_0 | _sm_5_0;
diff --git a/source/slang/slang-ir-legalize-varying-params.cpp b/source/slang/slang-ir-legalize-varying-params.cpp
index bd1648513..621c7a55e 100644
--- a/source/slang/slang-ir-legalize-varying-params.cpp
+++ b/source/slang/slang-ir-legalize-varying-params.cpp
@@ -3328,6 +3328,14 @@ protected:
result.permittedTypes.add(builder.getUIntType());
break;
}
+ case SystemValueSemanticName::Barycentrics:
+ {
+ result.systemValueName = toSlice("barycentric_coord");
+ result.permittedTypes.add(builder.getVectorType(
+ builder.getBasicType(BaseType::Float),
+ builder.getIntValue(builder.getIntType(), 3)));
+ break;
+ }
default:
m_sink->diagnose(
parentVar,
diff --git a/source/slang/slang-ir-legalize-varying-params.h b/source/slang/slang-ir-legalize-varying-params.h
index fcb4b8b81..4f23b1e6d 100644
--- a/source/slang/slang-ir-legalize-varying-params.h
+++ b/source/slang/slang-ir-legalize-varying-params.h
@@ -75,6 +75,7 @@ void depointerizeInputParams(IRFunc* entryPoint);
M(QuadLaneIndex, SV_QuadLaneIndex) \
M(VulkanVertexID, SV_VulkanVertexID) \
M(VulkanInstanceID, SV_VulkanInstanceID) \
+ M(Barycentrics, SV_Barycentrics) \
/* end */
/// A known system-value semantic name that can be applied to a parameter