Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4358 | Serge | 1 | /********************************************************** |
2 | * Copyright 2008-2009 VMware, Inc. All rights reserved. |
||
3 | * |
||
4 | * Permission is hereby granted, free of charge, to any person |
||
5 | * obtaining a copy of this software and associated documentation |
||
6 | * files (the "Software"), to deal in the Software without |
||
7 | * restriction, including without limitation the rights to use, copy, |
||
8 | * modify, merge, publish, distribute, sublicense, and/or sell copies |
||
9 | * of the Software, and to permit persons to whom the Software is |
||
10 | * furnished to do so, subject to the following conditions: |
||
11 | * |
||
12 | * The above copyright notice and this permission notice shall be |
||
13 | * included in all copies or substantial portions of the Software. |
||
14 | * |
||
15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||
16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
||
18 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
||
19 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
||
20 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
||
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||
22 | * SOFTWARE. |
||
23 | * |
||
24 | **********************************************************/ |
||
25 | |||
26 | /** |
||
27 | * @file |
||
28 | * SVGA Shader Token Opcode Info |
||
29 | * |
||
30 | * @author Michal Krol |
||
31 | */ |
||
32 | |||
33 | #include "util/u_debug.h" |
||
34 | #include "svga_shader_op.h" |
||
35 | |||
36 | #include "../svga_hw_reg.h" |
||
37 | #include "svga3d_shaderdefs.h" |
||
38 | |||
39 | #define SVGA3DOP_INVALID SVGA3DOP_END |
||
40 | #define TGSI_OPCODE_INVALID TGSI_OPCODE_LAST |
||
41 | |||
42 | static struct sh_opcode_info opcode_info[] = |
||
43 | { |
||
44 | { "nop", 0, 0, 0, 0, SVGA3DOP_NOP }, |
||
45 | { "mov", 1, 1, 0, 0, SVGA3DOP_MOV, }, |
||
46 | { "add", 1, 2, 0, 0, SVGA3DOP_ADD, }, |
||
47 | { "sub", 1, 2, 0, 0, SVGA3DOP_SUB, }, |
||
48 | { "mad", 1, 3, 0, 0, SVGA3DOP_MAD, }, |
||
49 | { "mul", 1, 2, 0, 0, SVGA3DOP_MUL, }, |
||
50 | { "rcp", 1, 1, 0, 0, SVGA3DOP_RCP, }, |
||
51 | { "rsq", 1, 1, 0, 0, SVGA3DOP_RSQ, }, |
||
52 | { "dp3", 1, 2, 0, 0, SVGA3DOP_DP3, }, |
||
53 | { "dp4", 1, 2, 0, 0, SVGA3DOP_DP4, }, |
||
54 | { "min", 1, 2, 0, 0, SVGA3DOP_MIN, }, |
||
55 | { "max", 1, 2, 0, 0, SVGA3DOP_MAX, }, |
||
56 | { "slt", 1, 2, 0, 0, SVGA3DOP_SLT, }, |
||
57 | { "sge", 1, 2, 0, 0, SVGA3DOP_SGE, }, |
||
58 | { "exp", 1, 1, 0, 0, SVGA3DOP_EXP, }, |
||
59 | { "log", 1, 1, 0, 0, SVGA3DOP_LOG, }, |
||
60 | { "lit", 1, 1, 0, 0, SVGA3DOP_LIT, }, |
||
61 | { "dst", 1, 2, 0, 0, SVGA3DOP_DST, }, |
||
62 | { "lrp", 1, 3, 0, 0, SVGA3DOP_LRP, }, |
||
63 | { "frc", 1, 1, 0, 0, SVGA3DOP_FRC, }, |
||
64 | { "m4x4", 1, 2, 0, 0, SVGA3DOP_M4x4, }, |
||
65 | { "m4x3", 1, 2, 0, 0, SVGA3DOP_M4x3, }, |
||
66 | { "m3x4", 1, 2, 0, 0, SVGA3DOP_M3x4, }, |
||
67 | { "m3x3", 1, 2, 0, 0, SVGA3DOP_M3x3, }, |
||
68 | { "m3x2", 1, 2, 0, 0, SVGA3DOP_M3x2, }, |
||
69 | { "call", 0, 1, 0, 0, SVGA3DOP_CALL, }, |
||
70 | { "callnz", 0, 2, 0, 0, SVGA3DOP_CALLNZ, }, |
||
71 | { "loop", 0, 2, 0, 1, SVGA3DOP_LOOP, }, |
||
72 | { "ret", 0, 0, 0, 0, SVGA3DOP_RET, }, |
||
73 | { "endloop", 0, 0, 1, 0, SVGA3DOP_ENDLOOP, }, |
||
74 | { "label", 0, 1, 0, 0, SVGA3DOP_LABEL, }, |
||
75 | { "dcl", 0, 0, 0, 0, SVGA3DOP_DCL, }, |
||
76 | { "pow", 1, 2, 0, 0, SVGA3DOP_POW, }, |
||
77 | { "crs", 1, 2, 0, 0, SVGA3DOP_CRS, }, |
||
78 | { "sgn", 1, 3, 0, 0, SVGA3DOP_SGN, }, |
||
79 | { "abs", 1, 1, 0, 0, SVGA3DOP_ABS, }, |
||
80 | { "nrm", 1, 1, 0, 0, SVGA3DOP_NRM, }, /* 3-componenet normalization */ |
||
81 | { "sincos", 1, 3, 0, 0, SVGA3DOP_SINCOS, }, |
||
82 | { "rep", 0, 1, 0, 1, SVGA3DOP_REP, }, |
||
83 | { "endrep", 0, 0, 1, 0, SVGA3DOP_ENDREP, }, |
||
84 | { "if", 0, 1, 0, 1, SVGA3DOP_IF, }, |
||
85 | { "ifc", 0, 2, 0, 1, SVGA3DOP_IFC, }, |
||
86 | { "else", 0, 0, 1, 1, SVGA3DOP_ELSE, }, |
||
87 | { "endif", 0, 0, 1, 0, SVGA3DOP_ENDIF, }, |
||
88 | { "break", 0, 0, 0, 0, SVGA3DOP_BREAK, }, |
||
89 | { "breakc", 0, 2, 0, 0, SVGA3DOP_BREAKC, }, |
||
90 | { "mova", 1, 1, 0, 0, SVGA3DOP_MOVA, }, |
||
91 | { "defb", 0, 0, 0, 0, SVGA3DOP_DEFB, }, |
||
92 | { "defi", 0, 0, 0, 0, SVGA3DOP_DEFI, }, |
||
93 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
94 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
95 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
96 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
97 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
98 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
99 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
100 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
101 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
102 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
103 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
104 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
105 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
106 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
107 | { "???", 0, 0, 0, 0, SVGA3DOP_INVALID, }, |
||
108 | { "texcoord", 1, 0, 0, 0, SVGA3DOP_TEXCOORD, }, |
||
109 | { "texkill", 1, 0, 0, 0, SVGA3DOP_TEXKILL, }, |
||
110 | { "tex", 1, 0, 0, 0, SVGA3DOP_TEX, }, |
||
111 | { "texbem", 1, 1, 0, 0, SVGA3DOP_TEXBEM, }, |
||
112 | { "texbeml", 1, 1, 0, 0, SVGA3DOP_TEXBEML, }, |
||
113 | { "texreg2ar", 1, 1, 0, 0, SVGA3DOP_TEXREG2AR, }, |
||
114 | { "texreg2gb", 1, 1, 0, 0, SVGA3DOP_TEXREG2GB, }, |
||
115 | { "texm3x2pad", 1, 1, 0, 0, SVGA3DOP_TEXM3x2PAD, }, |
||
116 | { "texm3x2tex", 1, 1, 0, 0, SVGA3DOP_TEXM3x2TEX, }, |
||
117 | { "texm3x3pad", 1, 1, 0, 0, SVGA3DOP_TEXM3x3PAD, }, |
||
118 | { "texm3x3tex", 1, 1, 0, 0, SVGA3DOP_TEXM3x3TEX, }, |
||
119 | { "reserved0", 0, 0, 0, 0, SVGA3DOP_RESERVED0, }, |
||
120 | { "texm3x3spec", 1, 2, 0, 0, SVGA3DOP_TEXM3x3SPEC, }, |
||
121 | { "texm3x3vspec", 1, 1, 0, 0, SVGA3DOP_TEXM3x3VSPEC,}, |
||
122 | { "expp", 1, 1, 0, 0, SVGA3DOP_EXPP, }, |
||
123 | { "logp", 1, 1, 0, 0, SVGA3DOP_LOGP, }, |
||
124 | { "cnd", 1, 3, 0, 0, SVGA3DOP_CND, }, |
||
125 | { "def", 0, 0, 0, 0, SVGA3DOP_DEF, }, |
||
126 | { "texreg2rgb", 1, 1, 0, 0, SVGA3DOP_TEXREG2RGB, }, |
||
127 | { "texdp3tex", 1, 1, 0, 0, SVGA3DOP_TEXDP3TEX, }, |
||
128 | { "texm3x2depth", 1, 1, 0, 0, SVGA3DOP_TEXM3x2DEPTH,}, |
||
129 | { "texdp3", 1, 1, 0, 0, SVGA3DOP_TEXDP3, }, |
||
130 | { "texm3x3", 1, 1, 0, 0, SVGA3DOP_TEXM3x3, }, |
||
131 | { "texdepth", 1, 0, 0, 0, SVGA3DOP_TEXDEPTH, }, |
||
132 | { "cmp", 1, 3, 0, 0, SVGA3DOP_CMP, }, |
||
133 | { "bem", 1, 2, 0, 0, SVGA3DOP_BEM, }, |
||
134 | { "dp2add", 1, 3, 0, 0, SVGA3DOP_DP2ADD, }, |
||
135 | { "dsx", 1, 1, 0, 0, SVGA3DOP_INVALID, }, |
||
136 | { "dsy", 1, 1, 0, 0, SVGA3DOP_INVALID, }, |
||
137 | { "texldd", 1, 4, 0, 0, SVGA3DOP_INVALID, }, |
||
138 | { "setp", 1, 2, 0, 0, SVGA3DOP_SETP, }, |
||
139 | { "texldl", 1, 2, 0, 0, SVGA3DOP_TEXLDL, }, |
||
140 | { "breakp", 0, 1, 0, 0, SVGA3DOP_INVALID, }, |
||
141 | }; |
||
142 | |||
143 | const struct sh_opcode_info *svga_opcode_info( uint op ) |
||
144 | { |
||
145 | struct sh_opcode_info *info; |
||
146 | |||
147 | if (op >= sizeof( opcode_info ) / sizeof( opcode_info[0] )) { |
||
148 | /* The opcode is either PHASE, COMMENT, END or out of range. |
||
149 | */ |
||
150 | assert( 0 ); |
||
151 | return NULL; |
||
152 | } |
||
153 | |||
154 | info = &opcode_info[op]; |
||
155 | |||
156 | if (info->svga_opcode == SVGA3DOP_INVALID) { |
||
157 | /* No valid information. Please provide number of dst/src registers. |
||
158 | */ |
||
159 | _debug_printf("Missing information for opcode %u, '%s'\n", op, |
||
160 | opcode_info[op].mnemonic); |
||
161 | assert( 0 ); |
||
162 | return NULL; |
||
163 | } |
||
164 | |||
165 | /* Sanity check. |
||
166 | */ |
||
167 | assert( op == info->svga_opcode ); |
||
168 | |||
169 | return info; |
||
170 | } |