SIMD

試作:GLSL互換ベクトルクラス

シェーダーのベクトルはswizzle機能が最高です。これをC++で実現するのは長年の夢でした。さらに、SIMDを実装に用いれれば...最高です! 一応、こんなことができるところまで行きました。 using namespace glsl_math; vec4 a( 1, 2, 3, 4 ), b( 5, 6, 7, 8 )…

STLとの共存のための妥協案

D3DXMATRIXA16でも、同様の手法で SIMD を使っているようです。 // まず、アライン指定無しの構造体を宣言 struct none_aligned_vec4 { union { float array[ 4 ]; struct { float x, y, z, w; }; struct { float r, g, b, a; }; }; none_aligned_vec4( floa…

STLと仲が悪くなるのはなぜ?

__m128 と vector なら... __m128 a = { 0.1f, 0.2f, 0.3f, 0.4f }; std::vector v; v.push_back( a ); コンパイル通ります。 でも、継承したベクトルクラスなんかを作ると... class vec4 : public __m128 { ... }; std::vector v; v.push_back( vec4( 0.1f,…

足し算

#include "stdafx.h" #include #include int _tmain(int argc, _TCHAR* argv[]) { // _mm_add_ps __m128 a = { 0.1f, 0.2f, 0.3f, 0.4f }, b = { 0.5f, 0.6f, 0.7f, 0.8f }; __m128 c = _mm_add_ps( a, b ); for ( int i = 0; i