blob: b13b1baabb0801f0c82a409303a6251a4ed22269 [file] [log] [blame]
Jamie Madill3c9eeb92013-11-04 11:09:26 -05001//
2// Copyright (c) 2002-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// NodeSearch.h: Utilities for searching translator node graphs
7//
8
Geoff Lang0a73dd82014-11-19 16:18:08 -05009#ifndef COMPILER_TRANSLATOR_NODESEARCH_H_
10#define COMPILER_TRANSLATOR_NODESEARCH_H_
Jamie Madill3c9eeb92013-11-04 11:09:26 -050011
Jamie Madillb1a85f42014-08-19 15:23:24 -040012#include "compiler/translator/IntermNode.h"
Jamie Madille53c98b2014-02-03 11:57:13 -050013
Jamie Madill3c9eeb92013-11-04 11:09:26 -050014namespace sh
15{
16
17template <class Parent>
18class NodeSearchTraverser : public TIntermTraverser
19{
20 public:
21 NodeSearchTraverser()
Olli Etuaho3d0d9a42015-06-01 12:16:36 +030022 : TIntermTraverser(true, false, false),
23 mFound(false)
Jamie Madill3c9eeb92013-11-04 11:09:26 -050024 {}
25
26 bool found() const { return mFound; }
27
28 static bool search(TIntermNode *node)
29 {
30 Parent searchTraverser;
31 node->traverse(&searchTraverser);
32 return searchTraverser.found();
33 }
34
35 protected:
36 bool mFound;
37};
38
39class FindDiscard : public NodeSearchTraverser<FindDiscard>
40{
41 public:
42 virtual bool visitBranch(Visit visit, TIntermBranch *node)
43 {
44 switch (node->getFlowOp())
45 {
46 case EOpKill:
47 mFound = true;
48 break;
49
50 default: break;
51 }
52
53 return !mFound;
54 }
55};
56
Jamie Madill3c9eeb92013-11-04 11:09:26 -050057}
58
Geoff Lang0a73dd82014-11-19 16:18:08 -050059#endif // COMPILER_TRANSLATOR_NODESEARCH_H_