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:
committed by
Matt Pharr
parent
98a2d69e72
commit
59036cdf5b
15
tests/swizzle-1.ispc
Normal file
15
tests/swizzle-1.ispc
Normal 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
15
tests/swizzle-2.ispc
Normal 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
15
tests/swizzle-3.ispc
Normal 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
15
tests/swizzle-4.ispc
Normal 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
15
tests/swizzle-5.ispc
Normal 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
18
tests/swizzle-6.ispc
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user