blob: 07b9a72c5c65631a6afef74349d57e56828f5f64 [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
Geoff Lang0a73dd82014-11-19 16:18:08 -05007#ifndef COMPILER_TRANSLATOR_FLAGSTD140STRUCTS_H_
8#define COMPILER_TRANSLATOR_FLAGSTD140STRUCTS_H_
Jamie Madill570e04d2013-06-21 09:15:33 -04009
Jamie Madillb1a85f42014-08-19 15:23:24 -040010#include "compiler/translator/IntermNode.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
Geoff Lang0a73dd82014-11-19 16:18:08 -050037#endif // COMPILER_TRANSLATOR_FLAGSTD140STRUCTS_H_