blob: 610205eb92e9b2c2440dd70b20b983a50622d3db [file] [log] [blame]
Jamie Madill570e04d2013-06-21 09:15:33 -04001//
2// Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#ifndef COMPILER_FLAGSTD140STRUCTS_H_
8#define COMPILER_FLAGSTD140STRUCTS_H_
9
Geoff Lang17732822013-08-29 13:46:49 -040010#include "compiler/translator/intermediate.h"
Jamie Madill570e04d2013-06-21 09:15:33 -040011
12namespace sh
13{
14
15// This class finds references to nested structs of std140 blocks that access
16// the nested struct "by value", where the padding added in the translator
17// conflicts with the "natural" unpadded type.
18class FlagStd140Structs : public TIntermTraverser
19{
20 public:
21 const std::vector<TIntermTyped *> getFlaggedNodes() const { return mFlaggedNodes; }
22
23 protected:
24 virtual bool visitBinary(Visit visit, TIntermBinary *binaryNode);
25 virtual void visitSymbol(TIntermSymbol *symbol);
26
27 private:
28 bool isInStd140InterfaceBlock(TIntermTyped *node) const;
29
30 std::vector<TIntermTyped *> mFlaggedNodes;
31};
32
33std::vector<TIntermTyped *> FlagStd140ValueStructs(TIntermNode *node);
34
35}
36
37#endif // COMPILER_FLAGSTD140STRUCTS_H_