1 | #ifndef _RC10_GENERAL_H
|
---|
2 | #define _RC10_GENERAL_H
|
---|
3 |
|
---|
4 | #include "rc1.0_register.h"
|
---|
5 | #include "nvparse_errors.h"
|
---|
6 | #include "nvparse_externs.h"
|
---|
7 |
|
---|
8 | enum {
|
---|
9 | RCP_MUL = 0,
|
---|
10 | RCP_DOT,
|
---|
11 | RCP_MUX,
|
---|
12 | RCP_SUM
|
---|
13 | };
|
---|
14 |
|
---|
15 | class ConstColorStruct {
|
---|
16 | public:
|
---|
17 | void Init(RegisterEnum _reg, float _v0, float _v1, float _v2, float _v3)
|
---|
18 | { reg = _reg; v[0] = _v0; v[1] = _v1; v[2] = _v2; v[3] = _v3; }
|
---|
19 | RegisterEnum reg;
|
---|
20 | float v[4];
|
---|
21 | };
|
---|
22 |
|
---|
23 | class OpStruct {
|
---|
24 | public:
|
---|
25 | void Init(int _op, RegisterEnum _reg0, MappedRegisterStruct _reg1, MappedRegisterStruct _reg2)
|
---|
26 | { op = _op; reg[0].reg = _reg0; reg[1] = _reg1; reg[2] = _reg2; }
|
---|
27 | void Init(int _op, RegisterEnum _reg0)
|
---|
28 | { op = _op; reg[0].reg = _reg0; }
|
---|
29 | int op;
|
---|
30 | MappedRegisterStruct reg[3];
|
---|
31 | void Validate(int stage, int portion);
|
---|
32 | };
|
---|
33 |
|
---|
34 | class GeneralFunctionStruct {
|
---|
35 | public:
|
---|
36 | void Init(OpStruct _op0, OpStruct _op1, OpStruct _op2) { op[0] = _op0; op[1] = _op1; op[2] = _op2; numOps = 3; }
|
---|
37 | void Init(OpStruct _op0, OpStruct _op1) { op[0] = _op0; op[1] = _op1; numOps = 2; }
|
---|
38 | void Init(OpStruct _op0) { op[0] = _op0; numOps = 1; }
|
---|
39 | void Validate(int stage, int portion);
|
---|
40 | void Invoke(int stage, int portion, BiasScaleEnum bs);
|
---|
41 | void ZeroOut();
|
---|
42 | int numOps;
|
---|
43 | OpStruct op[3];
|
---|
44 | };
|
---|
45 |
|
---|
46 |
|
---|
47 | class GeneralPortionStruct {
|
---|
48 | public:
|
---|
49 | void Init(int _designator, GeneralFunctionStruct _gf, BiasScaleEnum _bs)
|
---|
50 | { designator = _designator; gf = _gf; bs = _bs; }
|
---|
51 |
|
---|
52 | void Validate(int stage);
|
---|
53 | void Invoke(int stage);
|
---|
54 | void ZeroOut();
|
---|
55 | int designator;
|
---|
56 | GeneralFunctionStruct gf;
|
---|
57 | BiasScaleEnum bs;
|
---|
58 | };
|
---|
59 |
|
---|
60 | class GeneralCombinerStruct {
|
---|
61 | public:
|
---|
62 | void Init(GeneralPortionStruct _portion0, GeneralPortionStruct _portion1, ConstColorStruct _cc0, ConstColorStruct _cc1)
|
---|
63 | { portion[0] = _portion0; portion[1] = _portion1; numPortions = 2; cc[0] = _cc0; cc[1] = _cc1; numConsts = 2; }
|
---|
64 | void Init(GeneralPortionStruct _portion0, GeneralPortionStruct _portion1, ConstColorStruct _cc0)
|
---|
65 | { portion[0] = _portion0; portion[1] = _portion1; numPortions = 2; cc[0] = _cc0; numConsts = 1; }
|
---|
66 | void Init(GeneralPortionStruct _portion0, GeneralPortionStruct _portion1)
|
---|
67 | { portion[0] = _portion0; portion[1] = _portion1; numPortions = 2; numConsts = 0; }
|
---|
68 |
|
---|
69 | void Init(GeneralPortionStruct _portion0, ConstColorStruct _cc0, ConstColorStruct _cc1)
|
---|
70 | { portion[0] = _portion0; numPortions = 1; cc[0] = _cc0; cc[1] = _cc1; numConsts = 2; }
|
---|
71 | void Init(GeneralPortionStruct _portion0, ConstColorStruct _cc0)
|
---|
72 | { portion[0] = _portion0; numPortions = 1; cc[0] = _cc0; numConsts = 1; }
|
---|
73 | void Init(GeneralPortionStruct _portion0)
|
---|
74 | { portion[0] = _portion0; numPortions = 1; numConsts = 0; }
|
---|
75 |
|
---|
76 | void Validate(int stage);
|
---|
77 | void SetUnusedLocalConsts(int numGlobalConsts, ConstColorStruct *globalCCs);
|
---|
78 | void Invoke(int stage);
|
---|
79 | void ZeroOut();
|
---|
80 | GeneralPortionStruct portion[2];
|
---|
81 | int numPortions;
|
---|
82 | ConstColorStruct cc[2];
|
---|
83 | int numConsts;
|
---|
84 | };
|
---|
85 |
|
---|
86 | class GeneralCombinersStruct {
|
---|
87 | public:
|
---|
88 | void Init() {num = 0;}
|
---|
89 | void Init(GeneralCombinerStruct _gc) { num = 1; general[0] = _gc; }
|
---|
90 | GeneralCombinersStruct& operator+=(GeneralCombinerStruct& _gc)
|
---|
91 | {
|
---|
92 | if (num < RCP_NUM_GENERAL_COMBINERS)
|
---|
93 | general[num++] = _gc;
|
---|
94 | else
|
---|
95 | errors.set("Too many general combiners.");
|
---|
96 | return *this;
|
---|
97 | }
|
---|
98 | void Validate(int numConsts, ConstColorStruct *cc);
|
---|
99 | void Invoke();
|
---|
100 | GeneralCombinerStruct general[RCP_NUM_GENERAL_COMBINERS];
|
---|
101 | int num;
|
---|
102 | private:
|
---|
103 | int localConsts;
|
---|
104 | };
|
---|
105 |
|
---|
106 |
|
---|
107 | #endif
|
---|