Subversion Repositories Kolibri OS

Rev

Go to most recent revision | 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 "main/glheader.h"
  37. #include "main/macros.h"
  38.  
  39. #include "m_eval.h"
  40. #include "m_matrix.h"
  41. #include "m_translate.h"
  42. #include "m_xform.h"
  43.  
  44.  
  45. #ifdef DEBUG_MATH
  46. #include "m_debug.h"
  47. #endif
  48.  
  49. #ifdef USE_X86_ASM
  50. #include "x86/common_x86_asm.h"
  51. #endif
  52.  
  53. #ifdef USE_X86_64_ASM
  54. #include "x86-64/x86-64.h"
  55. #endif
  56.  
  57. #ifdef USE_SPARC_ASM
  58. #include "sparc/sparc.h"
  59. #endif
  60.  
  61. clip_func _mesa_clip_tab[5];
  62. clip_func _mesa_clip_np_tab[5];
  63. dotprod_func _mesa_dotprod_tab[5];
  64. vec_copy_func _mesa_copy_tab[0x10];
  65. normal_func _mesa_normal_tab[0xf];
  66. transform_func *_mesa_transform_tab[5];
  67.  
  68.  
  69. /* Raw data format used for:
  70.  *    - Object-to-eye transform prior to culling, although this too
  71.  *      could be culled under some circumstances.
  72.  *    - Eye-to-clip transform (via the function above).
  73.  *    - Cliptesting
  74.  *    - And everything else too, if culling happens to be disabled.
  75.  *
  76.  * GH: It's used for everything now, as clipping/culling is done
  77.  *     elsewhere (most often by the driver itself).
  78.  */
  79. #define TAG(x) x
  80. #define TAG2(x,y) x##y
  81. #define STRIDE_LOOP for ( i = 0 ; i < count ; i++, STRIDE_F(from, stride) )
  82. #define LOOP for ( i = 0 ; i < n ; i++ )
  83. #define ARGS
  84. #include "m_xform_tmp.h"
  85. #include "m_clip_tmp.h"
  86. #include "m_norm_tmp.h"
  87. #include "m_dotprod_tmp.h"
  88. #include "m_copy_tmp.h"
  89. #undef TAG
  90. #undef TAG2
  91. #undef LOOP
  92. #undef ARGS
  93.  
  94.  
  95. /*
  96.  * This is called only once.  It initializes several tables with pointers
  97.  * to optimized transformation functions.  This is where we can test for
  98.  * AMD 3Dnow! capability, Intel SSE, etc. and hook in the right code.
  99.  */
  100. void
  101. _math_init_transformation( void )
  102. {
  103.    init_c_transformations();
  104.    init_c_norm_transform();
  105.    init_c_cliptest();
  106.    init_copy0();
  107.    init_dotprod();
  108.  
  109. #ifdef DEBUG_MATH
  110.    _math_test_all_transform_functions( "default" );
  111.    _math_test_all_normal_transform_functions( "default" );
  112.    _math_test_all_cliptest_functions( "default" );
  113. #endif
  114.  
  115. #ifdef USE_X86_ASM
  116.    _mesa_init_all_x86_transform_asm();
  117. #elif defined( USE_SPARC_ASM )
  118.    _mesa_init_all_sparc_transform_asm();
  119. #elif defined( USE_X86_64_ASM )
  120.    _mesa_init_all_x86_64_transform_asm();
  121. #endif
  122. }
  123.