Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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 <michal@vmware.com>
  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. }
  171.