Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
885 | serge | 1 | |
2 | |||
3 | |||
4 | |||
5 | { |
||
6 | VS_OUT_POS = 0, |
||
7 | VS_OUT_PSIZE, |
||
8 | VS_OUT_COL0, |
||
9 | VS_OUT_COL1, |
||
10 | VS_OUT_COL2, |
||
11 | VS_OUT_COL3, |
||
12 | VS_OUT_TEX0, |
||
13 | VS_OUT_TEX1, |
||
14 | VS_OUT_TEX2, |
||
15 | VS_OUT_TEX3, |
||
16 | VS_OUT_TEX4, |
||
17 | VS_OUT_TEX5, |
||
18 | VS_OUT_TEX6, |
||
19 | VS_OUT_TEX7, |
||
20 | VS_OUT_FOG, |
||
21 | VS_OUT_MAX = 0xFFFFFFFF |
||
22 | }v_out_t; |
||
23 | |||
24 | |||
25 | |||
26 | vs_1_1 |
||
27 | |||
28 | |||
29 | dcl_color v1 |
||
30 | dcl_color1 v2 |
||
31 | dcl_fog v3 |
||
32 | dcl_psize v4 |
||
33 | dcl_texcoord v5 |
||
34 | dcl_texcoord1 v6 |
||
35 | |||
36 | |||
37 | |||
38 | |||
39 | mov oD1, v2 |
||
40 | |||
41 | |||
42 | mov oPts, v4.x |
||
43 | mov oT0, v5 |
||
44 | mov oT1, v6 |
||
45 | |||
46 | |||
47 | |||
48 | |||
49 | { |
||
50 | 0xfffe0101, 0x0000001f, 0x80000000, 0x900f0000, 0x0000001f, 0x8000000a, |
||
51 | 0x900f0001, 0x0000001f, 0x8001000a, 0x900f0002, 0x0000001f, 0x8000000b, |
||
52 | 0x900f0003, 0x0000001f, 0x80000004, 0x900f0004, 0x0000001f, 0x80000005, |
||
53 | 0x900f0005, 0x0000001f, 0x80010005, 0x900f0006, 0x00000001, 0xc00f0000, |
||
54 | 0x90e40000, 0x00000001, 0xd00f0000, 0x90e40001, 0x00000001, 0xd00f0001, |
||
55 | 0x90e40002, 0x00000001, 0xc00f0001, 0x90000003, 0x00000001, 0xc00f0002, |
||
56 | 0x90000004, 0x00000001, 0xe00f0000, 0x90e40005, 0x00000001, 0xe00f0001, |
||
57 | 0x90e40006, 0x0000ffff |
||
58 | }; |
||
59 | |||
60 | |||
61 | { |
||
62 | "nop", |
||
63 | "mov", |
||
64 | "add", |
||
65 | "sub", |
||
66 | "mad", |
||
67 | "mul", |
||
68 | "rcp", |
||
69 | "rsq", |
||
70 | "dp3", |
||
71 | "dp4", |
||
72 | "min", |
||
73 | "max", |
||
74 | "slt", |
||
75 | "sge", |
||
76 | "exp", |
||
77 | "log", |
||
78 | "lit", |
||
79 | "dst", |
||
80 | "lrp", |
||
81 | "frc", |
||
82 | "m4x4", |
||
83 | "m4x3", |
||
84 | "m3x4", |
||
85 | "m3x3", |
||
86 | "m3x2", |
||
87 | }; |
||
88 | |||
89 | |||
90 | char *sz_ps_command[] = |
||
91 | { |
||
92 | texcoord |
||
93 | texkill |
||
94 | tex |
||
95 | texbem |
||
96 | texbeml |
||
97 | texreg2ar |
||
98 | texreg2gb |
||
99 | texm3x2pad |
||
100 | texm3x3tex |
||
101 | texm3x3pad |
||
102 | texm3x3tex |
||
103 | texm3x3diff |
||
104 | texm3x3spec |
||
105 | texm3x3vspec |
||
106 | expp |
||
107 | logp |
||
108 | cnd |
||
109 | def |
||
110 | texreg2rgb |
||
111 | texdp3tex |
||
112 | texm3x2depth |
||
113 | texdp3 |
||
114 | texm3x3 |
||
115 | texdepth |
||
116 | cmp |
||
117 | bem |
||
118 | } |
||
119 | */ |
||
120 | |||
121 | |||
122 | { |
||
123 | "position", |
||
124 | "blendweight", |
||
125 | "blendindices", |
||
126 | "normal", |
||
127 | "psize", |
||
128 | "texcoord", |
||
129 | "tangent", |
||
130 | "binormal", |
||
131 | "tessfactor", |
||
132 | "positiont", |
||
133 | "color", |
||
134 | "fog", |
||
135 | "depth", |
||
136 | "sample" |
||
137 | }; |
||
138 | char *sztype[]= |
||
139 | { |
||
140 | "r", |
||
141 | "v", |
||
142 | "c" |
||
143 | "a", |
||
144 | "t", |
||
145 | "rasout", |
||
146 | "attrout", |
||
147 | "texcrdout", |
||
148 | "output", |
||
149 | "constint", |
||
150 | "colorout", |
||
151 | "depthout", |
||
152 | "sampler", |
||
153 | "const2", |
||
154 | "const3", |
||
155 | "const4", |
||
156 | "constbool", |
||
157 | "loop", |
||
158 | "tempfloat16", |
||
159 | "misctype", |
||
160 | "label", |
||
161 | "predicate" |
||
162 | }; |
||
163 | |||
164 | |||
165 | |||
166 | { |
||
167 | u32_t minor: 8; |
||
168 | u32_t major: 8; |
||
169 | u32_t type :16; |
||
170 | }version_t; |
||
171 | |||
172 | |||
173 | { |
||
174 | u32_t type:5; |
||
175 | u32_t rsv :11; |
||
176 | u32_t ind :4; |
||
177 | u32_t rsv2:11; |
||
178 | u32_t sign:1; |
||
179 | }usage_t; |
||
180 | |||
181 | |||
182 | { |
||
183 | u32_t ind :11; |
||
184 | u32_t typeh :2; |
||
185 | u32_t rsv :3; |
||
186 | u32_t wr :4; |
||
187 | u32_t mod :4; |
||
188 | u32_t scale :4; |
||
189 | u32_t typel :3; |
||
190 | u32_t sign :1; |
||
191 | }dst_t; |
||
192 | |||
193 | |||
194 | { |
||
195 | u32_t ind :11; |
||
196 | u32_t rsv :5; |
||
197 | u32_t swzl :8; |
||
198 | u32_t mod :4; |
||
199 | u32_t typel :3; |
||
200 | u32_t sign :1; |
||
201 | }src_t; |
||
202 | |||
203 | |||
204 | int parse_mov(); |
||
205 | int parse_dcl(); |
||
206 | |||
207 | |||
208 | |||
209 | |||
210 | |||
211 | |||
212 | |||
213 | |||
214 | |||
215 | u32_t inp_mask; |
||
216 | |||
217 | |||
218 | |||
219 | |||
220 | { |
||
221 | version_t *ver; |
||
222 | |||
223 | |||
224 | |||
225 | |||
226 | { |
||
227 | printf("vs_%d_%d\n\n",ver->major,ver->minor); |
||
228 | if( parse_vs(vs11+1) ) |
||
229 | translate_vs(vs11+1); |
||
230 | }; |
||
231 | |||
232 | |||
233 | }; |
||
234 | |||
235 | |||
236 | static char *txt_mod[2] = { "","_sat"}; |
||
237 | |||
238 | |||
239 | { |
||
240 | dst_t *dst; |
||
241 | src_t *src; |
||
242 | |||
243 | |||
244 | u32_t wr; |
||
245 | |||
246 | |||
247 | char szwm[5]; |
||
248 | |||
249 | |||
250 | |||
251 | |||
252 | { |
||
253 | op_type_t instr = *stream++ & 0xFFFF; |
||
254 | |||
255 | |||
256 | { |
||
257 | case D3DSIO_MOV: |
||
258 | dst = (dst_t*)stream++; |
||
259 | src = (src_t*)stream++; |
||
260 | |||
261 | |||
262 | wr = dst->wr; |
||
263 | |||
264 | |||
265 | { |
||
266 | szswzl[i] = txt_swzl[swzl&3]; |
||
267 | swzl>>=2; |
||
268 | if(wr & (1< |
||
269 | szwm[j++] = txt_swzl[i]; |
||
270 | }; |
||
271 | szswzl[4] = 0; |
||
272 | szwm[j] = 0; |
||
273 | |||
274 | |||
275 | { |
||
276 | case 4: // Rasterizer Register File |
||
277 | if(dst->ind == 0) |
||
278 | vs_out_written |= (1 << VS_OUT_POS); |
||
279 | else if (dst->ind == 1) |
||
280 | vs_out_written |= (1 << VS_OUT_FOG); |
||
281 | else if (dst->ind == 2) |
||
282 | vs_out_written |= (1 << VS_OUT_PSIZE); |
||
283 | else |
||
284 | printf("invalid raster register %d",dst->ind); |
||
285 | break; |
||
286 | |||
287 | |||
288 | if(dst->ind == 0) |
||
289 | vs_out_written |= (1 << VS_OUT_COL0); |
||
290 | else if (dst->ind == 1) |
||
291 | vs_out_written |= (1 << VS_OUT_COL1); |
||
292 | else |
||
293 | printf("invalid attribute register %d",dst->ind); |
||
294 | break; |
||
295 | |||
296 | |||
297 | if(dst->ind < 8) |
||
298 | vs_out_written |= (1 << (VS_OUT_TEX0+dst->ind)); |
||
299 | else |
||
300 | printf("invalid texture register %d",dst->ind); |
||
301 | }; |
||
302 | printf("%s%s %s%d.%s,\t %s%d.%s\n",sz_vs_command[instr],txt_mod[dst->mod], |
||
303 | sztype[dst->typel],dst->ind,szwm, |
||
304 | sztype[src->typel],src->ind,szswzl); |
||
305 | break; |
||
306 | |||
307 | |||
308 | parse_dcl(stream); |
||
309 | stream+=2; |
||
310 | break; |
||
311 | case 0xFFFF: |
||
312 | return 1; |
||
313 | |||
314 | |||
315 | return 0; |
||
316 | }; |
||
317 | }; |
||
318 | }; |
||
319 | |||
320 | |||
321 | |||
322 | { |
||
323 | usage_t *usage; |
||
324 | dst_t *dst; |
||
325 | int dsttype; |
||
326 | char szwm[5]; |
||
327 | int i; |
||
328 | u32_t wr; |
||
329 | |||
330 | |||
331 | dst = (dst_t*)stream++; |
||
332 | dsttype = (dst->typeh << 4) | dst->typel; |
||
333 | wr = dst->wr; |
||
334 | |||
335 | |||
336 | { |
||
337 | if(wr & 1) |
||
338 | szwm[i] = txt_swzl[i]; |
||
339 | }; |
||
340 | szwm[i] = 0; |
||
341 | |||
342 | |||
343 | sztype[dsttype],dst->ind, szwm); |
||
344 | |||
345 | |||
346 | } |
||
347 | |||
348 | |||
349 | |||
350 | |||
351 | int translate_mov(const u32_t *stream); |
||
352 | |||
353 | |||
354 | { |
||
355 | assign_outputs(); |
||
356 | |||
357 | |||
358 | { |
||
359 | op_type_t instr = *stream++ & 0xFFFF; |
||
360 | |||
361 | |||
362 | { |
||
363 | case D3DSIO_MOV: |
||
364 | translate_mov(stream); |
||
365 | stream+=2; |
||
366 | break; |
||
367 | case D3DSIO_DCL: |
||
368 | translate_dcl(stream); |
||
369 | stream+=2; |
||
370 | break; |
||
371 | case 0xFFFF: |
||
372 | return 1; |
||
373 | |||
374 | |||
375 | return 0; |
||
376 | }; |
||
377 | }; |
||
378 | }; |
||
379 | |||
380 | |||
381 | |||
382 | { |
||
383 | |||
384 | |||
385 | |||
386 | |||
387 | }; |
||
388 | |||
389 | |||
390 | |||
391 | |||
392 | |||
393 | |||
394 | * Swizzle indexes. |
||
395 | * Do not change! |
||
396 | */ |
||
397 | /*@{*/ |
||
398 | #define SWIZZLE_X 0 |
||
399 | #define SWIZZLE_Y 1 |
||
400 | #define SWIZZLE_Z 2 |
||
401 | #define SWIZZLE_W 3 |
||
402 | #define SWIZZLE_ZERO 4 /**< For SWZ instruction only */ |
||
403 | #define SWIZZLE_ONE 5 /**< For SWZ instruction only */ |
||
404 | #define SWIZZLE_NIL 7 /**< used during shader code gen (undefined value) */ |
||
405 | /*@}*/ |
||
406 | |||
407 | |||
408 | (PVS_SRC_OPERAND(t_src_index(vp, &src[x]), \ |
||
409 | t_swizzle(y), \ |
||
410 | t_swizzle(y), \ |
||
411 | t_swizzle(y), \ |
||
412 | t_swizzle(y), \ |
||
413 | t_src_class(src[x].File), \ |
||
414 | VSF_FLAG_NONE) | (src[x].RelAddr << 4)) |
||
415 | |||
416 | |||
417 | { |
||
418 | /* this is in fact a NOP as the Mesa SWIZZLE_* are all identical to VSF_IN_COMPONENT_* */ |
||
419 | return swizzle; |
||
420 | } |
||
421 | |||
422 | |||
423 | { |
||
424 | /* WRITEMASK_* is equivalent to VSF_FLAG_* */ |
||
425 | return mask & VSF_FLAG_ALL; |
||
426 | } |
||
427 | |||
428 | |||
429 | { |
||
430 | |||
431 | |||
432 | case 0: //D3DSPR_TEMP |
||
433 | return PVS_DST_REG_TEMPORARY; |
||
434 | case 3: //D3DSPR_ADDR |
||
435 | return PVS_DST_REG_A0; |
||
436 | case 4: //D3DSPR_RASTOUT |
||
437 | case 5: |
||
438 | case 6: //D3DSPR_TEXCRDOUT |
||
439 | return PVS_DST_REG_OUT; |
||
440 | |||
441 | |||
442 | case PROGRAM_INPUT: |
||
443 | case PROGRAM_LOCAL_PARAM: |
||
444 | case PROGRAM_ENV_PARAM: |
||
445 | case PROGRAM_NAMED_PARAM: |
||
446 | case PROGRAM_STATE_VAR: |
||
447 | case PROGRAM_WRITE_ONLY: |
||
448 | case PROGRAM_ADDRESS: |
||
449 | */ |
||
450 | default: |
||
451 | printf("problem in %s", __FUNCTION__); |
||
452 | return -1; |
||
453 | } |
||
454 | } |
||
455 | |||
456 | |||
457 | { |
||
458 | switch(dst->typel) |
||
459 | { |
||
460 | case 4: |
||
461 | if(dst->ind == 0) |
||
462 | return vs_outputs[VS_OUT_POS]; |
||
463 | else if (dst->ind == 1) |
||
464 | return vs_outputs[VS_OUT_FOG]; |
||
465 | else if (dst->ind == 2) |
||
466 | return vs_outputs[VS_OUT_PSIZE]; |
||
467 | break; |
||
468 | case 5: |
||
469 | if(dst->ind == 0) |
||
470 | return vs_outputs[VS_OUT_COL0]; |
||
471 | else if (dst->ind == 1) |
||
472 | return vs_outputs[VS_OUT_COL1]; |
||
473 | |||
474 | |||
475 | return vs_outputs[VS_OUT_TEX0+dst->ind]; |
||
476 | |||
477 | |||
478 | return dst->ind; |
||
479 | } |
||
480 | } |
||
481 | |||
482 | |||
483 | |||
484 | { |
||
485 | int i; |
||
486 | int cur_reg = 0; |
||
487 | |||
488 | |||
489 | vs_outputs[i] = -1; |
||
490 | |||
491 | |||
492 | |||
493 | |||
494 | vs_outputs[VS_OUT_POS] = cur_reg++; |
||
495 | } |
||
496 | |||
497 | |||
498 | vs_outputs[VS_OUT_PSIZE] = cur_reg++; |
||
499 | } |
||
500 | |||
501 | |||
502 | vs_outputs[VS_OUT_COL0] = cur_reg++; |
||
503 | } |
||
504 | |||
505 | |||
506 | vs_outputs[VS_OUT_COL1] = vs_outputs[VS_OUT_COL0] + 1; // ??? |
||
507 | cur_reg = vs_outputs[VS_OUT_COL1] + 1; |
||
508 | } |
||
509 | |||
510 | |||
511 | if (vp->key.OutputsWritten & (1 << VERT_RESULT_FOGC)) { //fog must be in |
||
512 | vp->outputs[VERT_RESULT_FOGC] = cur_reg++; //one of the color regs |
||
513 | } |
||
514 | #endif |
||
515 | |||
516 | |||
517 | if (vs_out_written & (1 << i)) { |
||
518 | vs_outputs[i] = cur_reg++; |
||
519 | } |
||
520 | } |
||
521 | } |
||
522 | |||
523 | |||
524 | |||
525 | { |
||
526 | |||
527 | |||
528 | src_t *src = (src_t*)stream++; |
||
529 | |||
530 | |||
531 | int wr = dst->wr; |
||
532 | |||
533 | |||
534 | |||
535 | 0, |
||
536 | 0, |
||
537 | t_dst_index(dst), |
||
538 | (dst->wr), |
||
539 | t_dst_class(dst->typel)); |
||
540 | |||
541 | |||
542 | // inst[2] = __CONST(0, SWIZZLE_ZERO); |
||
543 | //inst[3] = __CONST(0, SWIZZLE_ZERO); |
||
544 | printf("inst_0 %x\n", inst[0]); |
||
545 | return 1; |
||
546 | } |
||
547 | |||
548 | |||
549 | static GLuint *r300TranslateOpcodeMOV(struct r300_vertex_program *vp, |
||
550 | struct prog_instruction *vpi, |
||
551 | GLuint * inst, |
||
552 | struct prog_src_register src[3]) |
||
553 | { |
||
554 | //ADD RESULT 1.X Y Z W PARAM 0{} {X Y Z W} PARAM 0{} {ZERO ZERO ZERO ZERO} |
||
555 | |||
556 | |||
557 | GL_FALSE, |
||
558 | GL_FALSE, |
||
559 | t_dst_index(vp, &vpi->DstReg), |
||
560 | t_dst_mask(vpi->DstReg.WriteMask), |
||
561 | t_dst_class(vpi->DstReg.File)); |
||
562 | inst[1] = t_src(vp, &src[0]); |
||
563 | inst[2] = __CONST(0, SWIZZLE_ZERO); |
||
564 | inst[3] = __CONST(0, SWIZZLE_ZERO); |
||
565 | |||
566 | |||
567 | } |
||
568 | */><>=>><>><>><>><>><>><>>><>>>>><>><>>><>><>><>><>><> |
||
569 | > |