summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/glsl.meta.slang2
-rw-r--r--source/slang/slang-emit-spirv.cpp4
-rw-r--r--source/slang/slang-ir-glsl-legalize.cpp7
-rw-r--r--source/slang/slang-ir-legalize-varying-params.cpp9
-rw-r--r--source/slang/slang-ir-legalize-varying-params.h1
-rw-r--r--source/slang/slang-language-server-completion.cpp1
6 files changed, 24 insertions, 0 deletions
diff --git a/source/slang/glsl.meta.slang b/source/slang/glsl.meta.slang
index 8ffc50f6d..bbf0c40dd 100644
--- a/source/slang/glsl.meta.slang
+++ b/source/slang/glsl.meta.slang
@@ -96,6 +96,8 @@ public typealias dmat4x4 = matrix<double, 4, 4>;
public out float4 gl_Position : SV_Position;
public out float gl_PointSize : SV_PointSize;
+public in float2 gl_PointCoord : SV_PointCoord;
+
public in vec4 gl_FragCoord : SV_Position;
public out float gl_FragDepth : SV_Depth;
public out int gl_FragStencilRef : SV_StencilRef;
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp
index 18016d5fe..baef62f1c 100644
--- a/source/slang/slang-emit-spirv.cpp
+++ b/source/slang/slang-emit-spirv.cpp
@@ -5438,6 +5438,10 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex
// float in hlsl & glsl
return getBuiltinGlobalVar(inst->getFullType(), SpvBuiltInPointSize, inst);
}
+ else if (semanticName == "sv_pointcoord")
+ {
+ return getBuiltinGlobalVar(inst->getFullType(), SpvBuiltInPointCoord, inst);
+ }
else if (semanticName == "sv_drawindex")
{
requireSPIRVCapability(SpvCapabilityDrawParameters);
diff --git a/source/slang/slang-ir-glsl-legalize.cpp b/source/slang/slang-ir-glsl-legalize.cpp
index 802fc1eb4..eb101de86 100644
--- a/source/slang/slang-ir-glsl-legalize.cpp
+++ b/source/slang/slang-ir-glsl-legalize.cpp
@@ -651,6 +651,13 @@ GLSLSystemValueInfo* getGLSLSystemValueInfo(
name = "gl_PointSize";
requiredType = builder->getBasicType(BaseType::Float);
}
+ else if (semanticName == "sv_pointcoord")
+ {
+ name = "gl_PointCoord";
+ requiredType = builder->getVectorType(
+ builder->getBasicType(BaseType::Float),
+ builder->getIntValue(builder->getIntType(), 2));
+ }
else if (semanticName == "sv_drawindex")
{
name = "gl_DrawID";
diff --git a/source/slang/slang-ir-legalize-varying-params.cpp b/source/slang/slang-ir-legalize-varying-params.cpp
index a0d0ef91d..6ece10457 100644
--- a/source/slang/slang-ir-legalize-varying-params.cpp
+++ b/source/slang/slang-ir-legalize-varying-params.cpp
@@ -3154,6 +3154,14 @@ protected:
result.permittedTypes.add(builder.getBasicType(BaseType::Float));
break;
}
+ case SystemValueSemanticName::PointCoord:
+ {
+ result.systemValueName = toSlice("point_coord");
+ result.permittedTypes.add(builder.getVectorType(
+ builder.getBasicType(BaseType::Float),
+ builder.getIntValue(builder.getIntType(), 2)));
+ break;
+ }
case SystemValueSemanticName::PrimitiveID:
{
result.systemValueName = toSlice("primitive_id");
@@ -3804,6 +3812,7 @@ protected:
case SystemValueSemanticName::OutputControlPointID:
case SystemValueSemanticName::PointSize:
+ case SystemValueSemanticName::PointCoord:
{
result.isUnsupported = true;
}
diff --git a/source/slang/slang-ir-legalize-varying-params.h b/source/slang/slang-ir-legalize-varying-params.h
index ae88fbad1..21674cd9e 100644
--- a/source/slang/slang-ir-legalize-varying-params.h
+++ b/source/slang/slang-ir-legalize-varying-params.h
@@ -56,6 +56,7 @@ void depointerizeInputParams(IRFunc* entryPoint);
M(IsFrontFace, SV_IsFrontFace) \
M(OutputControlPointID, SV_OutputControlPointID) \
M(PointSize, SV_PointSize) \
+ M(PointCoord, SV_PointCoord) \
M(PrimitiveID, SV_PrimitiveID) \
M(DrawIndex, SV_DrawIndex) \
M(RenderTargetArrayIndex, SV_RenderTargetArrayIndex) \
diff --git a/source/slang/slang-language-server-completion.cpp b/source/slang/slang-language-server-completion.cpp
index 1e5bae4b0..240102a22 100644
--- a/source/slang/slang-language-server-completion.cpp
+++ b/source/slang/slang-language-server-completion.cpp
@@ -115,6 +115,7 @@ static const char* hlslSemanticNames[] = {
"SV_OutputControlPointID",
"SV_Position",
"SV_PointSize",
+ "SV_PointCoord",
"SV_PrimitiveID",
"SV_DrawIndex",
"SV_RenderTargetArrayIndex",