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 |
---|