diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/glsl.meta.slang | 2 | ||||
| -rw-r--r-- | source/slang/slang-emit-spirv.cpp | 4 | ||||
| -rw-r--r-- | source/slang/slang-ir-glsl-legalize.cpp | 7 | ||||
| -rw-r--r-- | source/slang/slang-ir-legalize-varying-params.cpp | 9 | ||||
| -rw-r--r-- | source/slang/slang-ir-legalize-varying-params.h | 1 | ||||
| -rw-r--r-- | source/slang/slang-language-server-completion.cpp | 1 |
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", |
