static void dump_reg( struct sh_reg reg, struct sh_srcreg *indreg, const struct dump_info *di )
{
   assert( reg.is_reg == 1 );

   switch (sh_reg_type( reg )) {
   case SVGA3DREG_TEMP:
      format_reg("r", reg, NULL);
      break;

   case SVGA3DREG_INPUT:
      format_reg("v", reg, indreg);
      break;

   case SVGA3DREG_CONST:
      format_reg("c", reg, indreg);
      break;

   case SVGA3DREG_ADDR:    /* VS */
   /* SVGA3DREG_TEXTURE */ /* PS */
      assert(!reg.relative);
      if (di->is_ps) {
         format_reg("t", reg, NULL);
      } else {
         format_reg("a", reg, NULL);
      }
      break;

   case SVGA3DREG_RASTOUT:
      assert(!reg.relative);
      switch (reg.number) {
      case 0 /*POSITION*/:
         _debug_printf( "oPos" );
         break;
      case 1 /*FOG*/:
         _debug_printf( "oFog" );
         break;
      case 2 /*POINT_SIZE*/:
         _debug_printf( "oPts" );
         break;
      default:
         assert( 0 );
         _debug_printf( "???" );
      }
      break;

   case SVGA3DREG_ATTROUT:
      assert( reg.number < 2 );
      format_reg("oD", reg, NULL);
      break;

   case SVGA3DREG_TEXCRDOUT:  /* VS */
   /* SVGA3DREG_OUTPUT */     /* VS3.0+ */
      if (!di->is_ps && di->version >= SVGA3D_VS_30) {
         format_reg("o", reg, indreg);
      } else {
         format_reg("oT", reg, NULL);
      }
      break;

   case SVGA3DREG_COLOROUT:
      format_reg("oC", reg, NULL);
      break;

   case SVGA3DREG_DEPTHOUT:
      assert(!reg.relative);
      assert(reg.number == 0);
      _debug_printf("oDepth");
      break;

   case SVGA3DREG_SAMPLER:
      format_reg("s", reg, NULL);
      break;

   case SVGA3DREG_CONSTBOOL:
      format_reg("b", reg, NULL);
      break;

   case SVGA3DREG_CONSTINT:
      format_reg("i", reg, NULL);
      break;

   case SVGA3DREG_LOOP:
      assert(!reg.relative);
      assert( reg.number == 0 );
      _debug_printf( "aL" );
      break;

   case SVGA3DREG_MISCTYPE:
      assert(!reg.relative);
      switch (reg.number) {
      case SVGA3DMISCREG_POSITION:
         _debug_printf("vPos");
         break;
      case SVGA3DMISCREG_FACE:
         _debug_printf("vFace");
         break;
      default:
         assert(0);
         _debug_printf("???");
      }
      break;

   case SVGA3DREG_LABEL:
      format_reg("l", reg, NULL);
      break;

   case SVGA3DREG_PREDICATE:
      format_reg("p", reg, NULL);
      break;

   default:
      assert( 0 );
      _debug_printf( "???" );
   }
}
Пример #2
0
static void dump_reg( struct sh_reg reg, struct sh_srcreg *indreg, const struct dump_info *di )
{
   assert( sh_reg_type( reg ) == SVGA3DREG_CONST || reg.relative == 0 );
   assert( reg.is_reg == 1 );

   switch (sh_reg_type( reg )) {
   case SVGA3DREG_TEMP:
      debug_printf( "r%u", reg.number );
      break;

   case SVGA3DREG_INPUT:
      debug_printf( "v%u", reg.number );
      break;

   case SVGA3DREG_CONST:
      if (reg.relative) {
         if (sh_srcreg_type( *indreg ) == SVGA3DREG_LOOP)
            debug_printf( "c[aL+%u]", reg.number );
         else
            debug_printf( "c[a%u.x+%u]", indreg->number, reg.number );
      }
      else
         debug_printf( "c%u", reg.number );
      break;

   case SVGA3DREG_ADDR:    /* VS */
   /* SVGA3DREG_TEXTURE */ /* PS */
      if (di->is_ps)
         debug_printf( "t%u", reg.number );
      else
         debug_printf( "a%u", reg.number );
      break;

   case SVGA3DREG_RASTOUT:
      switch (reg.number) {
      case 0 /*POSITION*/:
         debug_printf( "oPos" );
         break;
      case 1 /*FOG*/:
         debug_printf( "oFog" );
         break;
      case 2 /*POINT_SIZE*/:
         debug_printf( "oPts" );
         break;
      default:
         assert( 0 );
         debug_printf( "???" );
      }
      break;

   case SVGA3DREG_ATTROUT:
      assert( reg.number < 2 );
      debug_printf( "oD%u", reg.number );
      break;

   case SVGA3DREG_TEXCRDOUT:
   /* SVGA3DREG_OUTPUT */
      debug_printf( "oT%u", reg.number );
      break;

   case SVGA3DREG_COLOROUT:
      debug_printf( "oC%u", reg.number );
      break;

   case SVGA3DREG_DEPTHOUT:
      debug_printf( "oD%u", reg.number );
      break;

   case SVGA3DREG_SAMPLER:
      debug_printf( "s%u", reg.number );
      break;

   case SVGA3DREG_CONSTBOOL:
      assert( !reg.relative );
      debug_printf( "b%u", reg.number );
      break;

   case SVGA3DREG_CONSTINT:
      assert( !reg.relative );
      debug_printf( "i%u", reg.number );
      break;

   case SVGA3DREG_LOOP:
      assert( reg.number == 0 );
      debug_printf( "aL" );
      break;

   case SVGA3DREG_MISCTYPE:
      switch (reg.number) {
      case SVGA3DMISCREG_POSITION:
         debug_printf( "vPos" );
         break;
      case SVGA3DMISCREG_FACE:
         debug_printf( "vFace" );
         break;
      default:
         assert(0);
         break;
      }
      break;

   case SVGA3DREG_LABEL:
      debug_printf( "l%u", reg.number );
      break;

   case SVGA3DREG_PREDICATE:
      debug_printf( "p%u", reg.number );
      break;


   default:
      assert( 0 );
      debug_printf( "???" );
   }
}