| // |
| // Copyright (c) 2015 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. |
| // |
| |
| // Cache.h: Implements a cache for various commonly created objects. |
| |
| #ifndef COMPILER_TRANSLATOR_CACHE_H_ |
| #define COMPILER_TRANSLATOR_CACHE_H_ |
| |
| #include <stdint.h> |
| #include <string.h> |
| #include <map> |
| |
| #include "compiler/translator/Types.h" |
| #include "compiler/translator/PoolAlloc.h" |
| |
| namespace sh |
| { |
| |
| class TCache |
| { |
| public: |
| static void initialize(); |
| static void destroy(); |
| |
| static const TType *getType(TBasicType basicType, TPrecision precision) |
| { |
| return getType(basicType, precision, EvqTemporary, 1, 1); |
| } |
| static const TType *getType(TBasicType basicType, |
| unsigned char primarySize = 1, |
| unsigned char secondarySize = 1) |
| { |
| return getType(basicType, EbpUndefined, EvqGlobal, primarySize, secondarySize); |
| } |
| static const TType *getType(TBasicType basicType, |
| TQualifier qualifier, |
| unsigned char primarySize = 1, |
| unsigned char secondarySize = 1) |
| { |
| return getType(basicType, EbpUndefined, qualifier, primarySize, secondarySize); |
| } |
| static const TType *getType(TBasicType basicType, |
| TPrecision precision, |
| TQualifier qualifier, |
| unsigned char primarySize, |
| unsigned char secondarySize); |
| |
| private: |
| TCache() {} |
| |
| union TypeKey { |
| TypeKey(TBasicType basicType, |
| TPrecision precision, |
| TQualifier qualifier, |
| unsigned char primarySize, |
| unsigned char secondarySize); |
| |
| typedef uint8_t EnumComponentType; |
| struct |
| { |
| EnumComponentType basicType; |
| EnumComponentType precision; |
| EnumComponentType qualifier; |
| unsigned char primarySize; |
| unsigned char secondarySize; |
| } components; |
| uint64_t value; |
| |
| bool operator<(const TypeKey &other) const { return value < other.value; } |
| }; |
| typedef std::map<TypeKey, const TType *> TypeMap; |
| |
| TypeMap mTypes; |
| TPoolAllocator mAllocator; |
| |
| static TCache *sCache; |
| }; |
| |
| } // namespace sh |
| |
| #endif // COMPILER_TRANSLATOR_CACHE_H_ |