有效地使用SSE进行光栅化

时间:2017-02-12 00:09:59

标签: c sse simd

我一直在考虑使用SSE指令集让我的3D软件光栅化器更快,但我以前从未使用它们,觉得我完全错了。

我希望从更有经验的人那里听到这是否值得一试,如果这段代码写得不好:

typedef union _declspec(align(16)) {
    struct {
        float x;
        float y;
        float z;
        float w;
    };
    __m128 m128;
} Vec4_t;

Vec4_t AddVec(Vec4_t* a, Vec4_t *b) {
    __m128 value = _mm_add_ps(a->m128, b->m128);
    return *(Vec4_t*)&value;
}

这就是我测试它的方式:

Vec4_t a = { 2.0f, 4.0f, 10.0f, 123.1f };
Vec4_t b = { 6.0f, 12.0f, 16.0f, 64.0f };
Vec4_t c = AddVec(&a, &b);

printf("%f, %f, %f, %f\n", c.x, c.y, c.z, c.w);

输出:

8.000000, 16.000000, 26.000000, 187.100006

老实说,我不知道我在做什么。我对我写的代码甚至工作感到惊讶。

0 个答案:

没有答案