示例#1
0
文件: sse.c 项目: DavidGriffith/finx
void _mesa_init_sse_transform_asm( void )
{
#ifdef USE_SSE_ASM
   ASSIGN_XFORM_GROUP( sse, 2 );
   ASSIGN_XFORM_GROUP( sse, 3 );

#if 1
   /* TODO: Finish these off.
    */
   _mesa_transform_tab[4][MATRIX_GENERAL] =
      _mesa_sse_transform_points4_general;
   _mesa_transform_tab[4][MATRIX_3D] =
      _mesa_sse_transform_points4_3d;
   _mesa_transform_tab[4][MATRIX_IDENTITY] =
      _mesa_sse_transform_points4_identity;

   _mesa_normal_tab[NORM_TRANSFORM_NO_ROT] =
      _mesa_sse_transform_normals_no_rot;
   _mesa_normal_tab[NORM_TRANSFORM | NORM_RESCALE] =
      _mesa_sse_transform_rescale_normals;
   _mesa_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_RESCALE] =
      _mesa_sse_transform_rescale_normals_no_rot;
#else
   ASSIGN_XFORM_GROUP( sse, 4 );

   ASSIGN_NORM_GROUP( sse );
#endif

#ifdef DEBUG
   _math_test_all_transform_functions( "SSE" );
   _math_test_all_normal_transform_functions( "SSE" );
#endif
#endif
}
示例#2
0
文件: m_xform.c 项目: Ionic/nx-libs
/*
 * This is called only once.  It initializes several tables with pointers
 * to optimized transformation functions.  This is where we can test for
 * AMD 3Dnow! capability, Intel SSE, etc. and hook in the right code.
 */
void
_math_init_transformation( void )
{
   init_c_transformations();
   init_c_norm_transform();
   init_c_cliptest();
   init_copy0();
   init_dotprod();

#ifdef DEBUG
   _math_test_all_transform_functions( "default" );
   _math_test_all_normal_transform_functions( "default" );
   _math_test_all_cliptest_functions( "default" );
#endif

#ifdef USE_X86_ASM
   _mesa_init_all_x86_transform_asm();
#elif defined( USE_SPARC_ASM )
   _mesa_init_all_sparc_transform_asm();
#elif defined( USE_PPC_ASM )
   _mesa_init_all_ppc_transform_asm();
#elif defined( USE_X86_64_ASM )
   _mesa_init_all_x86_64_transform_asm();
#endif
}
示例#3
0
文件: sparc.c 项目: xSIMx/Mesa-3D
void _mesa_init_all_sparc_transform_asm(void)
{
   ASSIGN_XFORM_GROUP(sparc, 1)
   ASSIGN_XFORM_GROUP(sparc, 2)
   ASSIGN_XFORM_GROUP(sparc, 3)
   ASSIGN_XFORM_GROUP(sparc, 4)

   _mesa_clip_tab[4] = _mesa_sparc_cliptest_points4;
   _mesa_clip_np_tab[4] = _mesa_sparc_cliptest_points4_np;

   _mesa_normal_tab[NORM_TRANSFORM | NORM_NORMALIZE] =
	   _mesa_sparc_transform_normalize_normals;
   _mesa_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_NORMALIZE] =
	   _mesa_sparc_transform_normalize_normals_no_rot;
   _mesa_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_RESCALE] =
	   _mesa_sparc_transform_rescale_normals_no_rot;
   _mesa_normal_tab[NORM_TRANSFORM | NORM_RESCALE] =
	   _mesa_sparc_transform_rescale_normals;
   _mesa_normal_tab[NORM_TRANSFORM_NO_ROT] =
	   _mesa_sparc_transform_normals_no_rot;
   _mesa_normal_tab[NORM_TRANSFORM] =
	   _mesa_sparc_transform_normals;
   _mesa_normal_tab[NORM_NORMALIZE] =
	   _mesa_sparc_normalize_normals;
   _mesa_normal_tab[NORM_RESCALE] =
	   _mesa_sparc_rescale_normals;

#ifdef DEBUG_MATH
   _math_test_all_transform_functions("sparc");
   _math_test_all_cliptest_functions("sparc");
   _math_test_all_normal_transform_functions("sparc");
#endif
}
示例#4
0
void _mesa_init_3dnow_transform_asm( void )
{
#ifdef USE_3DNOW_ASM
   ASSIGN_XFORM_GROUP( 3dnow, 2 );
   ASSIGN_XFORM_GROUP( 3dnow, 3 );
   ASSIGN_XFORM_GROUP( 3dnow, 4 );

#ifdef DEBUG_MATH
   _math_test_all_transform_functions( "3DNow!" );
   _math_test_all_normal_transform_functions( "3DNow!" );
#endif
#endif
}
示例#5
0
文件: x86-64.c 项目: xSIMx/Mesa-3D
void _mesa_init_all_x86_64_transform_asm(void)
{
#ifdef USE_X86_64_ASM
   unsigned int regs[4];

   if ( _mesa_getenv( "MESA_NO_ASM" ) ) {
     return;
   }

   message("Initializing x86-64 optimizations\n");


   _mesa_transform_tab[4][MATRIX_GENERAL] =
      _mesa_x86_64_transform_points4_general;
   _mesa_transform_tab[4][MATRIX_IDENTITY] =
      _mesa_x86_64_transform_points4_identity;
   _mesa_transform_tab[4][MATRIX_3D] =
      _mesa_x86_64_transform_points4_3d;

   regs[0] = 0x80000001;
   regs[1] = 0x00000000;
   regs[2] = 0x00000000;
   regs[3] = 0x00000000;
   _mesa_x86_64_cpuid(regs);
   if (regs[3] & (1U << 31)) {
      message("3Dnow! detected\n");
      _mesa_transform_tab[4][MATRIX_3D_NO_ROT] =
	  _mesa_3dnow_transform_points4_3d_no_rot;
      _mesa_transform_tab[4][MATRIX_PERSPECTIVE] =
	  _mesa_3dnow_transform_points4_perspective;
      _mesa_transform_tab[4][MATRIX_2D_NO_ROT] =
	  _mesa_3dnow_transform_points4_2d_no_rot;
      _mesa_transform_tab[4][MATRIX_2D] =
	  _mesa_3dnow_transform_points4_2d;

   }

   
#ifdef DEBUG_MATH
   _math_test_all_transform_functions("x86_64");
   _math_test_all_cliptest_functions("x86_64");
   _math_test_all_normal_transform_functions("x86_64");
#endif

#endif
}
示例#6
0
void _mesa_init_3dnow_transform_asm( void )
{
#ifdef USE_3DNOW_ASM
    ASSIGN_XFORM_GROUP( 3dnow, 2 );
    ASSIGN_XFORM_GROUP( 3dnow, 3 );
    ASSIGN_XFORM_GROUP( 3dnow, 4 );

    /* There's a bug somewhere in the 3dnow_normal.S file that causes
     * bad shading.  Disable for now.
    ASSIGN_NORM_GROUP( 3dnow );
    */

#ifdef DEBUG_MATH
    _math_test_all_transform_functions( "3DNow!" );
    _math_test_all_normal_transform_functions( "3DNow!" );
#endif
#endif
}
void _mesa_init_all_x86_64_transform_asm(void)
{
#ifdef USE_X86_64_ASM

   if ( _mesa_getenv( "MESA_NO_ASM" ) ) {
     return;
   }

   message("Initializing x86-64 optimizations\n");

   ASSIGN_XFORM_GROUP( x86_64, 4 );

   /*
   _mesa_transform_tab[4][MATRIX_GENERAL] =
      _mesa_x86_64_transform_points4_general;
   _mesa_transform_tab[4][MATRIX_IDENTITY] =
      _mesa_x86_64_transform_points4_identity;
   _mesa_transform_tab[4][MATRIX_3D] =
      _mesa_x86_64_transform_points4_3d;
   _mesa_transform_tab[4][MATRIX_3D_NO_ROT] =
      _mesa_x86_64_transform_points4_3d_no_rot;
   _mesa_transform_tab[4][MATRIX_PERSPECTIVE] =
      _mesa_x86_64_transform_points4_perspective;
   _mesa_transform_tab[4][MATRIX_2D_NO_ROT] =
      _mesa_x86_64_transform_points4_2d_no_rot;
   _mesa_transform_tab[4][MATRIX_2D] =
      _mesa_x86_64_transform_points4_2d;
   */
   
#ifdef DEBUG_MATH
   _math_test_all_transform_functions("x86_64");
   _math_test_all_cliptest_functions("x86_64");
   _math_test_all_normal_transform_functions("x86_64");
#endif

#endif
}