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

📄 r200_sanity.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 4 页
字号:
   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;}static int radeon_emit_veclinear(    drm_radeon_cmd_header_t header,   drm_radeon_cmd_buffer_t *cmdbuf ){   int sz = header.veclinear.count * 4;   int *data = (int *)cmdbuf->buf;   float *fdata =(float *)cmdbuf->buf;   int start = header.veclinear.addr_lo | (header.veclinear.addr_hi << 8);   int i;   if (1||VERBOSE)      fprintf(stderr, "emit vectors linear, start %d nr %d (end %d) (0x%x)\n",	      start, sz >> 2, start + (sz >> 2), header.i);   if (start < 0x60) {      for (i = 0 ; i < sz ;  i += 4) {	 fprintf(stderr, "R200_VS_PARAM %d 0 %f\n", (i >> 2) + start, fdata[i]);	 fprintf(stderr, "R200_VS_PARAM %d 1 %f\n", (i >> 2) + start, fdata[i+1]);	 fprintf(stderr, "R200_VS_PARAM %d 2 %f\n", (i >> 2) + start, fdata[i+2]);	 fprintf(stderr, "R200_VS_PARAM %d 3 %f\n", (i >> 2) + start, fdata[i+3]);      }   }   else if ((start >= 0x100) && (start < 0x160)) {      for (i = 0 ; i < sz ;  i += 4) {	 fprintf(stderr, "R200_VS_PARAM %d 0 %f\n", (i >> 2) + start - 0x100 + 0x60, fdata[i]);	 fprintf(stderr, "R200_VS_PARAM %d 1 %f\n", (i >> 2) + start - 0x100 + 0x60, fdata[i+1]);	 fprintf(stderr, "R200_VS_PARAM %d 2 %f\n", (i >> 2) + start - 0x100 + 0x60, fdata[i+2]);	 fprintf(stderr, "R200_VS_PARAM %d 3 %f\n", (i >> 2) + start - 0x100 + 0x60, fdata[i+3]);      }   }   else if ((start >= 0x80) && (start < 0xc0)) {      for (i = 0 ; i < sz ;  i += 4) {	 fprintf(stderr, "R200_VS_PROG %d OPDST %08x\n", (i >> 2) + start - 0x80, data[i]);	 fprintf(stderr, "R200_VS_PROG %d SRC1  %08x\n", (i >> 2) + start - 0x80, data[i+1]);	 fprintf(stderr, "R200_VS_PROG %d SRC2  %08x\n", (i >> 2) + start - 0x80, data[i+2]);	 fprintf(stderr, "R200_VS_PROG %d SRC3  %08x\n", (i >> 2) + start - 0x80, data[i+3]);      }   }   else if ((start >= 0x180) && (start < 0x1c0)) {      for (i = 0 ; i < sz ;  i += 4) {	 fprintf(stderr, "R200_VS_PROG %d OPDST %08x\n", (i >> 2) + start - 0x180 + 0x40, data[i]);	 fprintf(stderr, "R200_VS_PROG %d SRC1  %08x\n", (i >> 2) + start - 0x180 + 0x40, data[i+1]);	 fprintf(stderr, "R200_VS_PROG %d SRC2  %08x\n", (i >> 2) + start - 0x180 + 0x40, data[i+2]);	 fprintf(stderr, "R200_VS_PROG %d SRC3  %08x\n", (i >> 2) + start - 0x180 + 0x40, data[i+3]);      }   }   else {      fprintf(stderr, "write to unknown vector area\n");   }   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;

⌨️ 快捷键说明

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