[5] | 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 |
---|