Add support for multi-element vector swizzles. Issue #17.

This commit adds support for swizzles like "foo.zy" (if "foo" is,
for example, a float<3> type) as rvalues.  (Still need support for
swizzles as lvalues.)
This commit is contained in:
Pete Couperus
2011-07-22 13:10:14 +01:00
committed by Matt Pharr
parent 98a2d69e72
commit 59036cdf5b
10 changed files with 397 additions and 140 deletions

15
tests/swizzle-1.ispc Normal file
View File

@@ -0,0 +1,15 @@
export uniform int width() { return programCount; }
export void f_v(uniform float RET[]) {
float<3> a = {1,2,3};
float<3> b = a.zxy;
RET[programIndex] = b.x;
}
export void result(uniform float RET[]) {
RET[programIndex] = 3;
}

15
tests/swizzle-2.ispc Normal file
View File

@@ -0,0 +1,15 @@
export uniform int width() { return programCount; }
export void f_v(uniform float RET[]) {
float<3> a = {1,10,100};
float<3> b = a.zxy;
RET[programIndex] = b.x + 2*b.y + 3*b.z;
}
export void result(uniform float RET[]) {
RET[programIndex] = 132;
}

15
tests/swizzle-3.ispc Normal file
View File

@@ -0,0 +1,15 @@
export uniform int width() { return programCount; }
export void f_v(uniform float RET[]) {
float<3> a = {1,10,100};
float<6> b = a.zxyyxz;
RET[programIndex] = b.x + 2*b.y + 3*b.z - 3*b[3] - 2*b[4] - b[5];
}
export void result(uniform float RET[]) {
RET[programIndex] = 0;
}

15
tests/swizzle-4.ispc Normal file
View File

@@ -0,0 +1,15 @@
export uniform int width() { return programCount; }
export void f_v(uniform float RET[]) {
float<3> a = {1,2,3};
float<2> b = a.xy - a.uv;
RET[programIndex] = b.x + 2*b.y;
}
export void result(uniform float RET[]) {
RET[programIndex] = 0;
}

15
tests/swizzle-5.ispc Normal file
View File

@@ -0,0 +1,15 @@
export uniform int width() { return programCount; }
export void f_v(uniform float RET[]) {
float<3> a = {1,2,3};
float<3> b = a.rgb;
RET[programIndex] = b.x + 2*b.y + 3*b.z;
}
export void result(uniform float RET[]) {
RET[programIndex] = 14;
}

18
tests/swizzle-6.ispc Normal file
View File

@@ -0,0 +1,18 @@
export uniform int width() { return programCount; }
export void f_v(uniform float RET[]) {
float<3> a = {1,2,3};
float<3> b1 = a.yzx;
float<3> b2 = b1.yzx;
float<3> b3 = b2.yzx;
float<3> b = b3 - a;
RET[programIndex] = b.x + 2*b.y + 3*b.z;
}
export void result(uniform float RET[]) {
RET[programIndex] = 0;
}