From bae87afb20f95f9f27c64c4955bbc4464c576509 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 6 Feb 2025 22:02:43 -0800 Subject: Support stage_switch. (#6311) * Support stage_switch. * Update proposal status. * Fix gl_InstanceID. * Fix. --- source/slang/slang-parser.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'source/slang/slang-parser.cpp') diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp index 95eb971ee..38285c41f 100644 --- a/source/slang/slang-parser.cpp +++ b/source/slang/slang-parser.cpp @@ -5380,9 +5380,8 @@ static Stmt* ParseDefaultStmt(Parser* parser) return stmt; } -static Stmt* parseTargetSwitchStmt(Parser* parser) +static Stmt* parseTargetSwitchStmtImpl(Parser* parser, TargetSwitchStmt* stmt) { - TargetSwitchStmt* stmt = parser->astBuilder->create(); parser->FillPosition(stmt); parser->ReadToken(); if (!beginMatch(parser, MatchedTokenType::CurlyBraces)) @@ -5479,6 +5478,18 @@ static Stmt* parseTargetSwitchStmt(Parser* parser) return stmt; } +static Stmt* parseTargetSwitchStmt(Parser* parser) +{ + auto stmt = parser->astBuilder->create(); + return parseTargetSwitchStmtImpl(parser, stmt); +} + +static Stmt* parseStageSwitchStmt(Parser* parser) +{ + auto stmt = parser->astBuilder->create(); + return parseTargetSwitchStmtImpl(parser, stmt); +} + static Stmt* parseIntrinsicAsmStmt(Parser* parser) { IntrinsicAsmStmt* stmt = parser->astBuilder->create(); @@ -5725,6 +5736,8 @@ Stmt* Parser::ParseStatement(Stmt* parentStmt) statement = ParseSwitchStmt(this); else if (LookAheadToken("__target_switch")) statement = parseTargetSwitchStmt(this); + else if (LookAheadToken("__stage_switch")) + statement = parseStageSwitchStmt(this); else if (LookAheadToken("__intrinsic_asm")) statement = parseIntrinsicAsmStmt(this); else if (LookAheadToken("case")) -- cgit v1.2.3