Upcoming SlideShare
×

# 8.7.2011 agml

• 342 views

rcos summer 2011 adaptive math game library

rcos summer 2011 adaptive math game library

More in: Education , Technology
• Comment goes here.
Are you sure you want to
Be the first to comment
Be the first to like this

Total Views
342
On Slideshare
0
From Embeds
0
Number of Embeds
1

Shares
0
0
Likes
0

No embeds

### Report content

No notes for slide

### Transcript

• 1. Adaptive Game Math Library
• 2. What does it do? Something... I hope... Maybe?
• 3. Progress!
• 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. New Functionality
• 6. Whats Done? Gratuitous use of graphicsMatrix/Vector Implementations 4x4, f32 Specialization Complex Types Universal SIMD Type
• 7. Whats In Progress? Bulk Operations Approximations Allocators Probability Dynamic Vectors
• 8. Timing Framework
• 9. Performance
• 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. Testing● FrameworkAutomation●● Coverage
• 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. Future Directions
• 14. ARM Port
• 15. Bulk Matrix Containers and Matrix Stacks
• 16. Examples and Tutorials
• 17. Thank You!