⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r200_sanity.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 4 页
字号:
   else {      if (reg->idx != reg->closest->idx)	 sprintf(tmp, "%s+%d", reg->closest->name, reg->idx - reg->closest->idx);      else	 sprintf(tmp, "%s", reg->closest->name);   }   return tmp;}static int print_int_reg_assignment( struct reg *reg, int data ){   int changed = (reg->current.i != data);   int ever_seen = find_or_add_value( reg, data );      if (VERBOSE || (NORMAL && (changed || !ever_seen)))       fprintf(stderr, "   %s <-- 0x%x", get_reg_name(reg), data);          if (NORMAL) {      if (!ever_seen) 	 fprintf(stderr, " *** BRAND NEW VALUE");      else if (changed) 	 fprintf(stderr, " *** CHANGED");    }      reg->current.i = data;   if (VERBOSE || (NORMAL && (changed || !ever_seen)))      fprintf(stderr, "\n");   return changed;}static int print_float_reg_assignment( struct reg *reg, float data ){   int changed = (reg->current.f != data);   int newmin = (data < reg->vmin);   int newmax = (data > reg->vmax);   if (VERBOSE || (NORMAL && (newmin || newmax || changed)))      fprintf(stderr, "   %s <-- %.3f", get_reg_name(reg), data);   if (NORMAL) {      if (newmin) {	 fprintf(stderr, " *** NEW MIN (prev %.3f)", reg->vmin);	 reg->vmin = data;      }      else if (newmax) {	 fprintf(stderr, " *** NEW MAX (prev %.3f)", reg->vmax);	 reg->vmax = data;      }      else if (changed) {	 fprintf(stderr, " *** CHANGED");      }   }   reg->current.f = data;   if (VERBOSE || (NORMAL && (newmin || newmax || changed)))      fprintf(stderr, "\n");   return changed;}static int print_reg_assignment( struct reg *reg, int data ){   float_ui32_type datau;   datau.ui32 = data;   reg->flags |= TOUCHED;   if (reg->flags & ISFLOAT)      return print_float_reg_assignment( reg, datau.f );   else      return print_int_reg_assignment( reg, data );}static void print_reg( struct reg *reg ){   if (reg->flags & TOUCHED) {      if (reg->flags & ISFLOAT) {	 fprintf(stderr, "   %s == %f\n", get_reg_name(reg), reg->current.f);      } else {	 fprintf(stderr, "   %s == 0x%x\n", get_reg_name(reg), reg->current.i);      }   }}static void dump_state( void ){   int i;   for (i = 0 ; i < Elements(regs) ; i++)       print_reg( &regs[i] );   for (i = 0 ; i < Elements(scalars) ; i++)       print_reg( &scalars[i] );   for (i = 0 ; i < Elements(vectors) ; i++)       print_reg( &vectors[i] );}static int radeon_emit_packets(    drm_radeon_cmd_header_t header,   drm_radeon_cmd_buffer_t *cmdbuf ){   int id = (int)header.packet.packet_id;   int sz = packet[id].len;   int *data = (int *)cmdbuf->buf;   int i;      if (sz * sizeof(int) > cmdbuf->bufsz) {      fprintf(stderr, "Packet overflows cmdbuf\n");            return -EINVAL;   }   if (!packet[id].name) {      fprintf(stderr, "*** Unknown packet 0 nr %d\n", id );      return -EINVAL;   }      if (VERBOSE)       fprintf(stderr, "Packet 0 reg %s nr %d\n", packet[id].name, sz );   for ( i = 0 ; i < sz ; i++) {      struct reg *reg = lookup_reg( regs, packet[id].start + i*4 );      if (print_reg_assignment( reg, data[i] ))	 total_changed++;      total++;   }   cmdbuf->buf += sz * sizeof(int);   cmdbuf->bufsz -= sz * sizeof(int);   return 0;}static int radeon_emit_scalars(    drm_radeon_cmd_header_t header,   drm_radeon_cmd_buffer_t *cmdbuf ){   int sz = header.scalars.count;   int *data = (int *)cmdbuf->buf;   int start = header.scalars.offset;   int stride = header.scalars.stride;   int i;   if (VERBOSE)      fprintf(stderr, "emit scalars, start %d stride %d nr %d (end %d)\n",	      start, stride, sz, start + stride * sz);   for (i = 0 ; i < sz ; i++, start += stride) {      struct reg *reg = lookup_reg( scalars, start );      if (print_reg_assignment( reg, data[i] ))	 total_changed++;      total++;   }	    cmdbuf->buf += sz * sizeof(int);   cmdbuf->bufsz -= sz * sizeof(int);   return 0;}static int radeon_emit_scalars2(    drm_radeon_cmd_header_t header,   drm_radeon_cmd_buffer_t *cmdbuf ){   int sz = header.scalars.count;   int *data = (int *)cmdbuf->buf;   int start = header.scalars.offset + 0x100;   int stride = header.scalars.stride;   int i;   if (VERBOSE)      fprintf(stderr, "emit scalars2, start %d stride %d nr %d (end %d)\n",	      start, stride, sz, start + stride * sz);   if (start + stride * sz > 258) {      fprintf(stderr, "emit scalars OVERFLOW %d/%d/%d\n", start, stride, sz);      return -1;   }   for (i = 0 ; i < sz ; i++, start += stride) {      struct reg *reg = lookup_reg( scalars, start );      if (print_reg_assignment( reg, data[i] ))	 total_changed++;      total++;   }	    cmdbuf->buf += sz * sizeof(int);   cmdbuf->bufsz -= sz * sizeof(int);   return 0;}/* Check: inf/nan/extreme-size? * Check: table start, end, nr, etc. */static int radeon_emit_vectors(    drm_radeon_cmd_header_t header,   drm_radeon_cmd_buffer_t *cmdbuf ){   int sz = header.vectors.count;   int *data = (int *)cmdbuf->buf;   int start = header.vectors.offset;   int stride = header.vectors.stride;   int i,j;   if (VERBOSE)      fprintf(stderr, "emit vectors, start %d stride %d nr %d (end %d) (0x%x)\n",	      start, stride, sz, start + stride * sz, header.i);/*    if (start + stride * (sz/4) > 128) { *//*       fprintf(stderr, "emit vectors OVERFLOW %d/%d/%d\n", start, stride, sz); *//*       return -1; *//*    } */   for (i = 0 ; i < sz ;  start += stride) {      int changed = 0;      for (j = 0 ; j < 4 ; i++,j++) {	 struct reg *reg = lookup_reg( vectors, start*4+j );	 if (print_reg_assignment( reg, data[i] ))	    changed = 1;      }      if (changed)	 total_changed += 4;      total += 4;   }	    cmdbuf->buf += sz * sizeof(int);   cmdbuf->bufsz -= sz * sizeof(int);   return 0;}#if 0static int print_vertex_format( int vfmt ){   if (NORMAL) {      fprintf(stderr, "   %s(%x): %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",	      "vertex format",	      vfmt,	      "xy,",	      (vfmt & R200_VTX_Z0) ? "z," : "",	      (vfmt & R200_VTX_W0) ? "w0," : "",	      (vfmt & R200_VTX_FPCOLOR) ? "fpcolor," : "",	      (vfmt & R200_VTX_FPALPHA) ? "fpalpha," : "",	      (vfmt & R200_VTX_PKCOLOR) ? "pkcolor," : "",	      (vfmt & R200_VTX_FPSPEC) ? "fpspec," : "",	      (vfmt & R200_VTX_FPFOG) ? "fpfog," : "",	      (vfmt & R200_VTX_PKSPEC) ? "pkspec," : "",	      (vfmt & R200_VTX_ST0) ? "st0," : "",	      (vfmt & R200_VTX_ST1) ? "st1," : "",	      (vfmt & R200_VTX_Q1) ? "q1," : "",	      (vfmt & R200_VTX_ST2) ? "st2," : "",	      (vfmt & R200_VTX_Q2) ? "q2," : "",	      (vfmt & R200_VTX_ST3) ? "st3," : "",	      (vfmt & R200_VTX_Q3) ? "q3," : "",	      (vfmt & R200_VTX_Q0) ? "q0," : "",	      (vfmt & R200_VTX_N0) ? "n0," : "",	      (vfmt & R200_VTX_XY1) ? "xy1," : "",	      (vfmt & R200_VTX_Z1) ? "z1," : "",	      (vfmt & R200_VTX_W1) ? "w1," : "",	      (vfmt & R200_VTX_N1) ? "n1," : "");         if (!find_or_add_value( &others[V_VTXFMT], vfmt ))	 fprintf(stderr, " *** NEW VALUE");      fprintf(stderr, "\n");   }   return 0;}#endifstatic char *primname[0x10] = {   "NONE",   "POINTS",   "LINES",   "LINE_STRIP",   "TRIANGLES",   "TRIANGLE_FAN",   "TRIANGLE_STRIP",   "RECT_LIST",   NULL,   "3VRT_POINTS",   "3VRT_LINES",   "POINT_SPRITES",   "LINE_LOOP",   "QUADS",   "QUAD_STRIP",   "POLYGON",};static int print_prim_and_flags( int prim ){   int numverts;      if (NORMAL)      fprintf(stderr, "   %s(%x): %s%s%s%s%s%s\n",	      "prim flags",	      prim,	      ((prim & 0x30) == R200_VF_PRIM_WALK_IND) ? "IND," : "",	      ((prim & 0x30) == R200_VF_PRIM_WALK_LIST) ? "LIST," : "",	      ((prim & 0x30) == R200_VF_PRIM_WALK_RING) ? "RING," : "",	      (prim & R200_VF_COLOR_ORDER_RGBA) ? "RGBA," : "BGRA, ",	      (prim & R200_VF_INDEX_SZ_4) ? "INDX-32," : "",	      (prim & R200_VF_TCL_OUTPUT_VTX_ENABLE) ? "TCL_OUT_VTX," : "");   numverts = prim>>16;      if (NORMAL)      fprintf(stderr, "   prim: %s numverts %d\n", primname[prim&0xf], numverts);   switch (prim & 0xf) {   case R200_VF_PRIM_NONE:   case R200_VF_PRIM_POINTS:      if (numverts < 1) {	 fprintf(stderr, "Bad nr verts for line %d\n", numverts);	 return -1;      }      break;   case R200_VF_PRIM_LINES:   case R200_VF_PRIM_POINT_SPRITES:      if ((numverts & 1) || numverts == 0) {	 fprintf(stderr, "Bad nr verts for line %d\n", numverts);	 return -1;      }      break;   case R200_VF_PRIM_LINE_STRIP:   case R200_VF_PRIM_LINE_LOOP:      if (numverts < 2) {	 fprintf(stderr, "Bad nr verts for line_strip %d\n", numverts);	 return -1;      }      break;   case R200_VF_PRIM_TRIANGLES:   case R200_VF_PRIM_3VRT_POINTS:   case R200_VF_PRIM_3VRT_LINES:   case R200_VF_PRIM_RECT_LIST:      if (numverts % 3 || numverts == 0) {	 fprintf(stderr, "Bad nr verts for tri %d\n", numverts);	 return -1;      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -