Line data Source code
1 : //
2 : // Copyright (c) 2002-2015 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 : // Defines analyses of the AST needed for HLSL generation
8 :
9 : #ifndef COMPILER_TRANSLATOR_ASTMETADATAHLSL_H_
10 : #define COMPILER_TRANSLATOR_ASTMETADATAHLSL_H_
11 :
12 : #include <set>
13 : #include <vector>
14 :
15 : namespace sh
16 : {
17 :
18 : class CallDAG;
19 : class TIntermNode;
20 : class TIntermIfElse;
21 : class TIntermLoop;
22 :
23 0 : struct ASTMetadataHLSL
24 : {
25 0 : ASTMetadataHLSL()
26 0 : : mUsesGradient(false),
27 : mCalledInDiscontinuousLoop(false),
28 : mHasGradientLoopInCallGraph(false),
29 0 : mNeedsLod0(false)
30 : {
31 0 : }
32 :
33 : // Here "something uses a gradient" means here that it either contains a
34 : // gradient operation, or a call to a function that uses a gradient.
35 : bool hasGradientInCallGraph(TIntermLoop *node);
36 : bool hasGradientLoop(TIntermIfElse *node);
37 :
38 : // Does the function use a gradient.
39 : bool mUsesGradient;
40 :
41 : // Even if usesGradient is true, some control flow might not use a gradient
42 : // so we store the set of all gradient-using control flows.
43 : std::set<TIntermNode*> mControlFlowsContainingGradient;
44 :
45 : // Remember information about the discontinuous loops and which functions
46 : // are called in such loops.
47 : bool mCalledInDiscontinuousLoop;
48 : bool mHasGradientLoopInCallGraph;
49 : std::set<TIntermLoop*> mDiscontinuousLoops;
50 : std::set<TIntermIfElse *> mIfsContainingGradientLoop;
51 :
52 : // Will we need to generate a Lod0 version of the function.
53 : bool mNeedsLod0;
54 : };
55 :
56 : typedef std::vector<ASTMetadataHLSL> MetadataList;
57 :
58 : // Return the AST analysis result, in the order defined by the call DAG
59 : MetadataList CreateASTMetadataHLSL(TIntermNode *root, const CallDAG &callDag);
60 :
61 : } // namespace sh
62 :
63 : #endif // COMPILER_TRANSLATOR_ASTMETADATAHLSL_H_
|