Subversion Repositories Kolibri OS

Rev

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
}