8.7.2011 agml

685 views

Published on

rcos summer 2011 adaptive math game library

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
685
On SlideShare
0
From Embeds
0
Number of Embeds
34
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

8.7.2011 agml

  1. 1. Adaptive Game Math Library
  2. 2. What does it do? Something... I hope... Maybe?
  3. 3. Progress!
  4. 4. New Organization and Streamlined API API Tool Chain High Level Interface Build systemBulk Matrix Container Matrix Stack MakefileBulk Matrix Stack Dynamic Vector Code::Blocks Project Visual Studio Project Core Testing FrameworkVector Bulk Operations Allocators Automated TestingMatrix Approximations Probability Code Coverage Basics Timing FrameworkFixed-width Scalar Types Complex Types User-Friendly GUI Core Components Compatibility Layers and non User Facing Code Intrinsic Compatibility Layer Universal SIMD Types
  5. 5. New Functionality
  6. 6. Whats Done? Gratuitous use of graphicsMatrix/Vector Implementations 4x4, f32 Specialization Complex Types Universal SIMD Type
  7. 7. Whats In Progress? Bulk Operations Approximations Allocators Probability Dynamic Vectors
  8. 8. Timing Framework
  9. 9. Performance
  10. 10. void Rotate(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) { M3DMatrix44f mTemp, mRotate; m3dRotationMatrix44(mRotate, float(m3dDegToRad(angle)), x, y, z); m3dCopyMatrix44(mTemp, pStack[stackPointer]); m3dMatrixMultiply44(pStack[stackPointer], mTemp, mRotate);}void rot(f32 x, f32 y, f32 z) { t1 = _mm_mul_ps(simd[0],t); f32 b = cos(x), a = sin(x), d = cos(y), c = sin(y), H = -a*d; f = cos(z), e = sin(z); t = _mm_set1_ps(E); f32 cf = c*f, ae = a*e, be = b*e; t1 = _mm_add_ps(_mm_mul_ps(simd[1],t),t1 f32 A,B,C,D,E,F,H,I; C = ae-b*cf; _v128 t0, t1, t2; t = _mm_set1_ps(H); _v128 t; t1 = _mm_add_ps(_mm_mul_ps(simd[2],t),t1 A = d*f; F = be*c; t = _mm_set1_ps(A); t = _mm_set1_ps(C); D = -d*e; t2 = _mm_mul_ps(simd[0],t); t0 = _mm_mul_ps(simd[0],t); F+= a*f; t = _mm_set1_ps(D); t = _mm_set1_ps(F); B = a*cf; t2 = _mm_add_ps(_mm_mul_ps(simd[1],t),t2 t0 = _mm_add_ps(_mm_mul_ps(simd[1],t),t0); I = b*d; t = _mm_set1_ps(c); t = _mm_set1_ps(I); E = b*f; t2 = _mm_add_ps(_mm_mul_ps(simd[2],t),t2 t0 = _mm_add_ps(_mm_mul_ps(simd[2],t),t0); simd[0] = t0; E -= ae*c; simd[1] = t1; t = _mm_set1_ps(B); simd[2] = t2; B += be; }
  11. 11. Testing● FrameworkAutomation●● Coverage
  12. 12. Intrinsic Framework API Functions Generic SIMD Execution Layer Compile-time Decisions Inline Assembly and C Compiler Conversions betweenImplementations for non- Intrinsic Support SIMD architecturesconforming Environments
  13. 13. Future Directions
  14. 14. ARM Port
  15. 15. Bulk Matrix Containers and Matrix Stacks
  16. 16. Examples and Tutorials
  17. 17. Thank You!

×