From 94e30f52b65593a853c2afc03cc62e7456e96825 Mon Sep 17 00:00:00 2001 From: Sway007 Date: Tue, 16 Jul 2024 14:03:29 +0800 Subject: [PATCH 1/7] fix: conditional compilation --- packages/shader-lab/package.json | 7 +------ packages/shader-lab/src/Utils.ts | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/shader-lab/package.json b/packages/shader-lab/package.json index ceb5d162f1..5490505c02 100644 --- a/packages/shader-lab/package.json +++ b/packages/shader-lab/package.json @@ -12,9 +12,7 @@ "debug": "src/index.ts", "types": "types/index.d.ts", "scripts": { - "b:types": "tsc", - "gen_diagram": "ts-node ./scripts/genDiagram.ts", - "gen_dts": "ts-node ./scripts/genDts.ts" + "b:types": "tsc" }, "umd": { "name": "Galacean.ShaderLab", @@ -26,9 +24,6 @@ "dist/**/*", "types/**/*" ], - "dependencies": { - "chevrotain": "^10.5.0" - }, "devDependencies": { "@galacean/engine-design": "workspace:*", "@galacean/engine": "workspace:*" diff --git a/packages/shader-lab/src/Utils.ts b/packages/shader-lab/src/Utils.ts index a7d65617e8..38614c1e0e 100644 --- a/packages/shader-lab/src/Utils.ts +++ b/packages/shader-lab/src/Utils.ts @@ -4,8 +4,8 @@ import { EKeyword, ETokenType, GalaceanDataType, ShaderRange, ShaderPosition } f import { TreeNode } from "./parser/AST"; // #if _EDITOR import State from "./lalr/State"; -import { Logger } from "@galacean/engine"; // #endif +import { Logger } from "@galacean/engine"; export class ParserUtils { static unwrapNodeByType(node: TreeNode, type: ENonTerminal): T | undefined { From e3c7aa5b90c15e139174a7f320bf6d3be3447eb5 Mon Sep 17 00:00:00 2001 From: Sway007 Date: Tue, 16 Jul 2024 15:35:24 +0800 Subject: [PATCH 2/7] fix: expand token --- packages/shader-lab/src/index.ts | 3 +-- packages/shader-lab/src/preprocessor/PpParser.ts | 2 -- packages/shader-lab/src/preprocessor/PpScanner.ts | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/shader-lab/src/index.ts b/packages/shader-lab/src/index.ts index bb84aed6cd..7e733a06cc 100644 --- a/packages/shader-lab/src/index.ts +++ b/packages/shader-lab/src/index.ts @@ -1,8 +1,7 @@ export { ShaderLab } from "./ShaderLab"; // #if _EDITOR -import { Preprocessor } from "./preprocessor"; -export { Preprocessor }; +export { Preprocessor } from "./preprocessor"; // #endif //@ts-ignore diff --git a/packages/shader-lab/src/preprocessor/PpParser.ts b/packages/shader-lab/src/preprocessor/PpParser.ts index 8d59d2e403..f269c1fa63 100644 --- a/packages/shader-lab/src/preprocessor/PpParser.ts +++ b/packages/shader-lab/src/preprocessor/PpParser.ts @@ -605,9 +605,7 @@ export default class PpParser { } private static _onToken(token: BaseToken, scanner: PpScanner) { - // #if !_EDITOR this._skipEditorBlock(token, scanner); - // #endif this._expandToken(token, scanner); } diff --git a/packages/shader-lab/src/preprocessor/PpScanner.ts b/packages/shader-lab/src/preprocessor/PpScanner.ts index 33422d7d5f..2eb39a9de1 100644 --- a/packages/shader-lab/src/preprocessor/PpScanner.ts +++ b/packages/shader-lab/src/preprocessor/PpScanner.ts @@ -84,7 +84,7 @@ export default class PpScanner extends BaseScanner { if (this.isEnd()) return EOF; const start = this._currentIndex; - while (LexerUtils.isLetter(this.getCurChar())) { + while (LexerUtils.isLetter(this.getCurChar()) && !this.isEnd()) { this.advance(); } const end = this._currentIndex; From 36b77e081bdddbd6754dc454df4ec3b28cf41ad1 Mon Sep 17 00:00:00 2001 From: Sway007 Date: Tue, 16 Jul 2024 15:40:17 +0800 Subject: [PATCH 3/7] fix: expand token --- packages/shader-lab/src/preprocessor/PpScanner.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/shader-lab/src/preprocessor/PpScanner.ts b/packages/shader-lab/src/preprocessor/PpScanner.ts index 2eb39a9de1..7544558c74 100644 --- a/packages/shader-lab/src/preprocessor/PpScanner.ts +++ b/packages/shader-lab/src/preprocessor/PpScanner.ts @@ -189,7 +189,6 @@ export default class PpScanner extends BaseScanner { return { token, nextDirective: directive }; } - // #if !_EDITOR scanPairedBlock(lc = "{", rc = "}") { this.scanToChar(lc); let lvl = 0; @@ -199,7 +198,6 @@ export default class PpScanner extends BaseScanner { this._advance(); } while (lvl > 0); } - // #endif /** * @returns end ShaderPosition From b2e07fc8a6a25ddef75f193f00cf54d71723a72c Mon Sep 17 00:00:00 2001 From: Sway007 Date: Tue, 16 Jul 2024 17:40:18 +0800 Subject: [PATCH 4/7] feat: code opt --- .../shader-lab/src/preprocessor/PpParser.ts | 2 +- .../shader-lab/src/preprocessor/PpScanner.ts | 20 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/shader-lab/src/preprocessor/PpParser.ts b/packages/shader-lab/src/preprocessor/PpParser.ts index f269c1fa63..98a1d5c639 100644 --- a/packages/shader-lab/src/preprocessor/PpParser.ts +++ b/packages/shader-lab/src/preprocessor/PpParser.ts @@ -612,7 +612,7 @@ export default class PpParser { private static _skipEditorBlock(token: BaseToken, scanner: PpScanner) { if (token.lexeme === "EditorProperties" || token.lexeme === "EditorMacros") { const start = scanner.current - token.lexeme.length; - scanner.scanPairedBlock(); + scanner.scanPairedBlock("{", "}"); const end = scanner.current; const startPosition = ShaderLab.createPosition(start); const endPosition = ShaderLab.createPosition(end); diff --git a/packages/shader-lab/src/preprocessor/PpScanner.ts b/packages/shader-lab/src/preprocessor/PpScanner.ts index 7544558c74..892f8b87d3 100644 --- a/packages/shader-lab/src/preprocessor/PpScanner.ts +++ b/packages/shader-lab/src/preprocessor/PpScanner.ts @@ -161,7 +161,8 @@ export default class PpScanner extends BaseScanner { } scanToChar(char: string) { - while (this.getCurChar() !== char && !this.isEnd()) { + const source = this._source; + while (source[this._currentIndex] !== char && !this.isEnd()) { this.advance(); } } @@ -189,14 +190,21 @@ export default class PpScanner extends BaseScanner { return { token, nextDirective: directive }; } - scanPairedBlock(lc = "{", rc = "}") { + scanPairedBlock(lc: string, rc: string): void { this.scanToChar(lc); - let lvl = 0; + let level = 0; + const source = this._source; + do { - if (this.getCurChar() === lc) lvl += 1; - else if (this.getCurChar() === rc) lvl -= 1; + const curChar = source[this._currentIndex]; + + if (curChar === lc) { + level++; + } else if (curChar === rc) { + level--; + } this._advance(); - } while (lvl > 0); + } while (level > 0); } /** From 93df92e2e442a6b79a5f380323571b926b11b4a3 Mon Sep 17 00:00:00 2001 From: Sway007 Date: Tue, 16 Jul 2024 17:43:24 +0800 Subject: [PATCH 5/7] fix: ci --- pnpm-lock.yaml | 43 +------------------------------------------ 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bc827d5d7d..d76a98b9c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -245,10 +245,6 @@ importers: version: link:../design packages/shader-lab: - dependencies: - chevrotain: - specifier: ^10.5.0 - version: 10.5.0 devDependencies: '@galacean/engine': specifier: workspace:* @@ -521,29 +517,6 @@ packages: to-fast-properties: 2.0.0 dev: true - /@chevrotain/cst-dts-gen@10.5.0: - resolution: {integrity: sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==} - dependencies: - '@chevrotain/gast': 10.5.0 - '@chevrotain/types': 10.5.0 - lodash: 4.17.21 - dev: false - - /@chevrotain/gast@10.5.0: - resolution: {integrity: sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A==} - dependencies: - '@chevrotain/types': 10.5.0 - lodash: 4.17.21 - dev: false - - /@chevrotain/types@10.5.0: - resolution: {integrity: sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A==} - dev: false - - /@chevrotain/utils@10.5.0: - resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==} - dev: false - /@choojs/findup@0.2.1: resolution: {integrity: sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==} hasBin: true @@ -2040,17 +2013,6 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /chevrotain@10.5.0: - resolution: {integrity: sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==} - dependencies: - '@chevrotain/cst-dts-gen': 10.5.0 - '@chevrotain/gast': 10.5.0 - '@chevrotain/types': 10.5.0 - '@chevrotain/utils': 10.5.0 - lodash: 4.17.21 - regexp-to-ast: 0.5.0 - dev: false - /chokidar@3.5.1: resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} engines: {node: '>= 8.10.0'} @@ -4267,6 +4229,7 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true /log-symbols@4.0.0: resolution: {integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==} @@ -5081,10 +5044,6 @@ packages: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: true - /regexp-to-ast@0.5.0: - resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} - dev: false - /release-zalgo@1.0.0: resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} engines: {node: '>=4'} From 8e0cc2856dd5a13acfdbc93e7d509f399b7b2978 Mon Sep 17 00:00:00 2001 From: Sway007 Date: Wed, 17 Jul 2024 11:25:25 +0800 Subject: [PATCH 6/7] feat: cache error shader --- packages/shader-lab/src/ShaderLab.ts | 3 +++ packages/shader-lab/src/parser/ShaderTargetParser.ts | 6 ++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/shader-lab/src/ShaderLab.ts b/packages/shader-lab/src/ShaderLab.ts index c687e7fad7..c14ac06e31 100644 --- a/packages/shader-lab/src/ShaderLab.ts +++ b/packages/shader-lab/src/ShaderLab.ts @@ -80,6 +80,9 @@ export class ShaderLab implements IShaderLab { const lexer = new Lexer(ppdContent); const tokens = lexer.tokenize(); const program = ShaderLab._parser.parse(tokens); + if (!program) { + return { vertex: "", fragment: "" }; + } const codeGen = backend === ShaderPlatformTarget.GLES100 ? GLES100Visitor.getVisitor() : GLES300Visitor.getVisitor(); diff --git a/packages/shader-lab/src/parser/ShaderTargetParser.ts b/packages/shader-lab/src/parser/ShaderTargetParser.ts index 3248f92da4..56250740b7 100644 --- a/packages/shader-lab/src/parser/ShaderTargetParser.ts +++ b/packages/shader-lab/src/parser/ShaderTargetParser.ts @@ -52,7 +52,7 @@ export class ShaderTargetParser { this.sematicAnalyzer = new SematicAnalyzer(); } - parse(tokens: Generator) { + parse(tokens: Generator): ASTNode.GLShaderProgram | null { this.sematicAnalyzer.reset(); const start = performance.now(); const { _traceBackStack: traceBackStack, sematicAnalyzer } = this; @@ -104,9 +104,7 @@ export class ShaderTargetParser { continue; } else { Logger.error(token.location, `parse error token ${token.lexeme}`); - // #if _EDITOR - throw `invalid action table by token ${token.lexeme}, ${token.location.start.line}, ${token.location.start.column}`; - // #endif + return null; } } } From c92e674e13314d307ffc4c147545a0968b510c18 Mon Sep 17 00:00:00 2001 From: Sway007 Date: Wed, 17 Jul 2024 16:09:18 +0800 Subject: [PATCH 7/7] fix: preprocessor parse expression --- packages/shader-lab/src/preprocessor/PpParser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shader-lab/src/preprocessor/PpParser.ts b/packages/shader-lab/src/preprocessor/PpParser.ts index 98a1d5c639..6eeba54e60 100644 --- a/packages/shader-lab/src/preprocessor/PpParser.ts +++ b/packages/shader-lab/src/preprocessor/PpParser.ts @@ -382,7 +382,7 @@ export default class PpParser { if (scanner.getCurChar() === "(") { scanner.advance(); scanner.skipSpace(false); - const ret = this._parseConstant(scanner); + const ret = this._parseConstantExpression(scanner); scanner.scanToChar(")"); scanner.advance(); return ret;