// // Copyright 2025 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // #include "SizeClipCullDistance.h" #include "compiler/translator/SymbolTable.h" #include "compiler/translator/tree_util/IntermTraverse.h" #include "compiler/translator/tree_util/ReplaceVariable.h" #include "compiler/translator/util.h" namespace sh { bool SizeClipCullDistance(TCompiler *compiler, TIntermBlock *root, const ImmutableString &name, uint8_t size) { const TVariable *var = static_cast( compiler->getSymbolTable().findBuiltIn(name, compiler->getShaderVersion())); ASSERT(var != nullptr); if (size != var->getType().getOutermostArraySize()) { TType *resizedType = new TType(var->getType()); resizedType->setArraySize(0, size); TVariable *resizedVar = new TVariable(&compiler->getSymbolTable(), name, resizedType, SymbolType::BuiltIn); if (!ReplaceVariable(compiler, root, var, resizedVar)) { return false; } var = resizedVar; } TIntermDeclaration *globalDecl = new TIntermDeclaration(); globalDecl->appendDeclarator(new TIntermSymbol(var)); root->insertStatement(0, globalDecl); return compiler->validateAST(root); } } // namespace sh