Branch
Hash :
255dc673
Author :
Date :
2025-10-09T00:17:59
Translator: Validate ESSL 100 limitations during parse Validating the shape of the for loop as specifically required by WebGL (per ESSL 100 spec, Appendix A) is more easily done during parse, where the shape of the input GLSL is exactly known. Bug: angleproject:349994211 Change-Id: I05a9b1b6915dbc1f6c74bb9159f6cc85fefc7b67 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7022355 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
//
// Copyright 2017 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.
//
// SymbolUniqueId.h: Encapsulates a unique id for a symbol.
#ifndef COMPILER_TRANSLATOR_SYMBOLUNIQUEID_H_
#define COMPILER_TRANSLATOR_SYMBOLUNIQUEID_H_
#include "compiler/translator/Common.h"
namespace sh
{
class TSymbolTable;
class TSymbol;
class TSymbolUniqueId
{
public:
POOL_ALLOCATOR_NEW_DELETE
explicit TSymbolUniqueId(const TSymbol &symbol);
constexpr TSymbolUniqueId(const TSymbolUniqueId &) = default;
TSymbolUniqueId &operator=(const TSymbolUniqueId &) = default;
bool operator==(const TSymbolUniqueId &other) const { return mId == other.mId; }
bool operator!=(const TSymbolUniqueId &other) const { return !(*this == other); }
constexpr int get() const { return mId; }
static constexpr TSymbolUniqueId kInvalid() { return TSymbolUniqueId(-1); }
private:
friend class TSymbolTable;
explicit TSymbolUniqueId(TSymbolTable *symbolTable);
friend class BuiltInId;
constexpr TSymbolUniqueId(int staticId) : mId(staticId) {}
int mId;
};
enum class SymbolType : uint8_t
{
BuiltIn,
UserDefined,
AngleInternal,
Empty // Meaning symbol without a name.
};
enum class SymbolClass : uint8_t
{
Function,
Variable,
Struct,
InterfaceBlock
};
} // namespace sh
namespace std
{
template <>
struct hash<sh::TSymbolUniqueId>
{
size_t operator()(const sh::TSymbolUniqueId &key) const { return key.get(); }
};
} // namespace std
#endif // COMPILER_TRANSLATOR_SYMBOLUNIQUEID_H_