From 94e2800f5747ce1fe9baa6e0b64b23c55ce31c6d Mon Sep 17 00:00:00 2001 From: "shensi.zxd" Date: Fri, 15 May 2026 21:01:57 +0800 Subject: [PATCH 1/3] fix(shader-compiler): route CompilationWarning through Logger.warn MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `SemanticAnalyzer.reportWarning` called `console.warn` directly, so any embedder of the verbose shader-compiler bundle gets noisy output regardless of the engine's `Logger` toggle. In the editor (which uses `@galacean/engine-shader-compiler/verbose` to surface diagnostics) a single PBR shader compile fires several warnings — forward references to functions declared later in the same translation unit (`#define FUNCTION_DIFFUSE_IBL evaluateDiffuseIBL`), and runtime-injected macros (`RENDERER_JOINTS_NUM` / `RENDERER_BLENDSHAPE_COUNT` etc. that the engine prepends before compilation) — none of which AST-only static analysis can tell apart from real typos. Hundreds of warnings during an editing session drown out real errors. Switch to `Logger.warn` so warnings stay disabled by default and shader authors can opt in via `Logger.enable()` when actively debugging. Errors (`reportError`) keep going through `console.error` — they're always-on. --- packages/shader-compiler/src/parser/SemanticAnalyzer.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/shader-compiler/src/parser/SemanticAnalyzer.ts b/packages/shader-compiler/src/parser/SemanticAnalyzer.ts index dbb66e1778..fe553bb734 100644 --- a/packages/shader-compiler/src/parser/SemanticAnalyzer.ts +++ b/packages/shader-compiler/src/parser/SemanticAnalyzer.ts @@ -1,3 +1,4 @@ +import { Logger } from "@galacean/engine-core"; import { ShaderRange } from "../common"; import { SymbolTable } from "../common/SymbolTable"; import { SymbolTableStack } from "../common/SymbolTableStack"; @@ -88,6 +89,6 @@ export default class SemanticAnalyzer { } reportWarning(loc: ShaderRange, message: string): void { - console.warn(new GSError(GSErrorName.CompilationWarn, message, loc, ShaderCompiler._processingPassText).toString()); + Logger.warn(new GSError(GSErrorName.CompilationWarn, message, loc, ShaderCompiler._processingPassText).toString()); } } From 145a5e8de670bc4b34463e611df91cddf8385b7d Mon Sep 17 00:00:00 2001 From: "shensi.zxd" Date: Fri, 15 May 2026 21:15:36 +0800 Subject: [PATCH 2/3] refactor(loader): drop dead `@builtin` placeholder shader path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `ShaderLoader._getBuiltinShader` parsed `// @builtin ` from a `.shader` file's source and called `Shader.find(name)` instead of compiling. That indirection only mattered when the loader saw placeholder `.shader` files whose body was just a marker comment — a layout from the pre-ShaderLab era. Post `#2961` (GLSL → ShaderLab migration) all builtin shaders ship via `_shaderMap` and are resolved directly by `Shader.find`; nothing in the engine emits a placeholder `.shader` for the loader to parse. Confirmed zero remaining callers (the only reference to `_builtinRegex` / `_getBuiltinShader` was the loader's own check). Remove the regex, the helper, and the check. Net -14 lines. --- packages/loader/src/ShaderLoader.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/packages/loader/src/ShaderLoader.ts b/packages/loader/src/ShaderLoader.ts index 455e2dadc5..4c5fd2e027 100644 --- a/packages/loader/src/ShaderLoader.ts +++ b/packages/loader/src/ShaderLoader.ts @@ -10,8 +10,6 @@ import { @resourceLoader(AssetType.Shader, ["shader", "shaderc"]) class ShaderLoader extends Loader { - private static _builtinRegex = /^\s*\/\/\s*@builtin\s+(\w+)/; - load(item: LoadItem, resourceManager: ResourceManager): AssetPromise { const url = item.url!; @@ -25,17 +23,7 @@ class ShaderLoader extends Loader { // @ts-ignore return resourceManager._request(url, { ...item, type: "text" }).then((code: string) => { - const builtinShader = this._getBuiltinShader(code); - if (builtinShader) { - return Shader.find(builtinShader); - } - return Shader.create(code, undefined, url); }); } - - private _getBuiltinShader(code: string) { - const match = code.match(ShaderLoader._builtinRegex); - if (match && match[1]) return match[1]; - } } From c64bf8a7bccc2164a2f5fecab074c5825eb707b9 Mon Sep 17 00:00:00 2001 From: "shensi.zxd" Date: Mon, 18 May 2026 17:34:21 +0800 Subject: [PATCH 3/3] fix(shader-compiler): route remaining compile-path warns through Logger - `SymbolTable.insert` fired `console.warn` on symbol redeclaration, and `LALR1._addAction` fired `console.warn` on shift/reduce conflict detect. Both sit on the same verbose-bundle compile path as `SemanticAnalyzer. reportWarning` (94e2800f5), so `Logger.disable()` still leaked them. - Switch both to `Logger.warn` so the verbose shader-compiler bundle honors the engine-wide logger toggle end-to-end. --- packages/shader-compiler/src/common/SymbolTable.ts | 3 ++- packages/shader-compiler/src/lalr/LALR1.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/shader-compiler/src/common/SymbolTable.ts b/packages/shader-compiler/src/common/SymbolTable.ts index 96fb249a0e..4df92eb72c 100644 --- a/packages/shader-compiler/src/common/SymbolTable.ts +++ b/packages/shader-compiler/src/common/SymbolTable.ts @@ -1,3 +1,4 @@ +import { Logger } from "@galacean/engine-core"; import { IBaseSymbol } from "./IBaseSymbol"; export class SymbolTable { @@ -10,7 +11,7 @@ export class SymbolTable { for (let i = 0, n = entry.length; i < n; i++) { if (entry[i].isInMacroBranch) continue; if (entry[i].equal(symbol)) { - console.warn("Replace symbol:", symbol.ident); + Logger.warn("Replace symbol:", symbol.ident); entry[i] = symbol; return; } diff --git a/packages/shader-compiler/src/lalr/LALR1.ts b/packages/shader-compiler/src/lalr/LALR1.ts index c4d4cd974b..7a19e86d34 100644 --- a/packages/shader-compiler/src/lalr/LALR1.ts +++ b/packages/shader-compiler/src/lalr/LALR1.ts @@ -1,3 +1,4 @@ +import { Logger } from "@galacean/engine-core"; import { ETokenType } from "../common"; import { Keyword } from "../common/enums/Keyword"; import { Grammar } from "../parser/Grammar"; @@ -168,7 +169,7 @@ export class LALR1 { if (exist.action === EAction.Shift && action.action === EAction.Reduce) return; } else { // #if _VERBOSE - console.warn( + Logger.warn( `conflict detect: \n`, Utils.printAction(exist), "\n",