Upcoming SlideShare
×

# 8.7.2011 agml

685 views

Published on

rcos summer 2011 adaptive math game library

Published in: Education, Technology
0 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
Your message goes here
• Be the first to comment

• Be the first to like this

Views
Total views
685
On SlideShare
0
From Embeds
0
Number of Embeds
34
Actions
Shares
0
3
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!