Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Mesa 3-D graphics library
  3.  *
  4.  * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the "Software"),
  8.  * to deal in the Software without restriction, including without limitation
  9.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  10.  * and/or sell copies of the Software, and to permit persons to whom the
  11.  * Software is furnished to do so, subject to the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice shall be included
  14.  * in all copies or substantial portions of the Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  19.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  20.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  21.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  22.  * OTHER DEALINGS IN THE SOFTWARE.
  23.  */
  24.  
  25.  
  26. /*
  27.  * Matrix/vertex/vector transformation stuff
  28.  *
  29.  *
  30.  * NOTES:
  31.  * 1. 4x4 transformation matrices are stored in memory in column major order.
  32.  * 2. Points/vertices are to be thought of as column vectors.
  33.  * 3. Transformation of a point p by a matrix M is: p' = M * p
  34.  */
  35.  
  36. #include "c99_math.h"
  37. #include "main/glheader.h"
  38. #include "main/macros.h"
  39.  
  40. #include "m_eval.h"
  41. #include "m_matrix.h"
  42. #include "m_translate.h"
  43. #include "m_xform.h"
  44.  
  45.  
  46. #ifdef DEBUG_MATH
  47. #include "m_debug.h"
  48. #endif
  49.  
  50. #ifdef USE_X86_ASM
  51. #include "x86/common_x86_asm.h"
  52. #endif
  53.  
  54. #ifdef USE_X86_64_ASM
  55. #include "x86-64/x86-64.h"
  56. #endif
  57.  
  58. #ifdef USE_SPARC_ASM
  59. #include "sparc/sparc.h"
  60. #endif
  61.  
  62. clip_func _mesa_clip_tab[5];
  63. clip_func _mesa_clip_np_tab[5];
  64. dotprod_func _mesa_dotprod_tab[5];
  65. vec_copy_func _mesa_copy_tab[0x10];
  66. normal_func _mesa_normal_tab[0xf];
  67. transform_func *_mesa_transform_tab[5];
  68.  
  69.  
  70. /* Raw data format used for:
  71.  *    - Object-to-eye transform prior to culling, although this too
  72.  *      could be culled under some circumstances.
  73.  *    - Eye-to-clip transform (via the function above).
  74.  *    - Cliptesting
  75.  *    - And everything else too, if culling happens to be disabled.
  76.  *
  77.  * GH: It's used for everything now, as clipping/culling is done
  78.  *     elsewhere (most often by the driver itself).
  79.  */
  80. #define TAG(x) x
  81. #define TAG2(x,y) x##y
  82. #define STRIDE_LOOP for ( i = 0 ; i < count ; i++, STRIDE_F(from, stride) )
  83. #define LOOP for ( i = 0 ; i < n ; i++ )
  84. #define ARGS
  85. #include "m_xform_tmp.h"
  86. #include "m_clip_tmp.h"
  87. #include "m_norm_tmp.h"
  88. #include "m_dotprod_tmp.h"
  89. #include "m_copy_tmp.h"
  90. #undef TAG
  91. #undef TAG2
  92. #undef LOOP
  93. #undef ARGS
  94.  
  95.  
  96. /*
  97.  * This is called only once.  It initializes several tables with pointers
  98.  * to optimized transformation functions.  This is where we can test for
  99.  * AMD 3Dnow! capability, Intel SSE, etc. and hook in the right code.
  100.  */
  101. void
  102. _math_init_transformation( void )
  103. {
  104.    init_c_transformations();
  105.    init_c_norm_transform();
  106.    init_c_cliptest();
  107.    init_copy0();
  108.    init_dotprod();
  109.  
  110. #ifdef DEBUG_MATH
  111.    _math_test_all_transform_functions( "default" );
  112.    _math_test_all_normal_transform_functions( "default" );
  113.    _math_test_all_cliptest_functions( "default" );
  114. #endif
  115.  
  116. #ifdef USE_X86_ASM
  117.    _mesa_init_all_x86_transform_asm();
  118. #elif defined( USE_SPARC_ASM )
  119.    _mesa_init_all_sparc_transform_asm();
  120. #elif defined( USE_X86_64_ASM )
  121.    _mesa_init_all_x86_64_transform_asm();
  122. #endif
  123. }
  124.