Commit 363b61e7 by Nicolas Capens

Add Float4 swizzle tests.

Bug swiftshader:15 Change-Id: Id270f2f965a5a7154fa4dc83bd1edcd72cf2ff15 Reviewed-on: https://swiftshader-review.googlesource.com/7770Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-on: https://swiftshader-review.googlesource.com/8139Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com>
parent 73dd7a24
...@@ -182,6 +182,82 @@ TEST(SubzeroReactorTest, VectorConstant) ...@@ -182,6 +182,82 @@ TEST(SubzeroReactorTest, VectorConstant)
delete routine; delete routine;
} }
TEST(SubzeroReactorTest, Swizzle)
{
Routine *routine = nullptr;
{
Function<Int(Pointer<Byte>)> function;
{
Pointer<Byte> out = function.Arg<0>();
for(int i = 0; i < 256; i++)
{
*Pointer<Float4>(out + 16 * i) = Swizzle(Float4(1.0f, 2.0f, 3.0f, 4.0f), i);
}
for(int i = 0; i < 256; i++)
{
*Pointer<Float4>(out + 16 * (256 + i)) = ShuffleLowHigh(Float4(1.0f, 2.0f, 3.0f, 4.0f), Float4(5.0f, 6.0f, 7.0f, 8.0f), i);
}
*Pointer<Float4>(out + 16 * (512 + 0)) = UnpackLow(Float4(1.0f, 2.0f, 3.0f, 4.0f), Float4(5.0f, 6.0f, 7.0f, 8.0f));
*Pointer<Float4>(out + 16 * (512 + 1)) = UnpackHigh(Float4(1.0f, 2.0f, 3.0f, 4.0f), Float4(5.0f, 6.0f, 7.0f, 8.0f));
Return(0);
}
routine = function(L"one");
if(routine)
{
float out[256 + 256 + 2][4];
memset(out, 0, sizeof(out));
float exp[256 + 256 + 2][4];
for(int i = 0; i < 256; i++)
{
exp[i][0] = float((i >> 0) & 0x03) + 1.0f;
exp[i][1] = float((i >> 2) & 0x03) + 1.0f;
exp[i][2] = float((i >> 4) & 0x03) + 1.0f;
exp[i][3] = float((i >> 6) & 0x03) + 1.0f;
}
for(int i = 0; i < 256; i++)
{
exp[256 + i][0] = float((i >> 0) & 0x03) + 1.0f;
exp[256 + i][1] = float((i >> 2) & 0x03) + 1.0f;
exp[256 + i][2] = float((i >> 4) & 0x03) + 5.0f;
exp[256 + i][3] = float((i >> 6) & 0x03) + 5.0f;
}
exp[512 + 0][0] = 1.0f;
exp[512 + 0][1] = 5.0f;
exp[512 + 0][2] = 2.0f;
exp[512 + 0][3] = 6.0f;
exp[512 + 1][0] = 3.0f;
exp[512 + 1][1] = 7.0f;
exp[512 + 1][2] = 4.0f;
exp[512 + 1][3] = 8.0f;
int(*callable)(void*) = (int(*)(void*))routine->getEntry();
callable(out);
for(int i = 0; i < 256 + 256 + 2; i++)
{
EXPECT_EQ(out[i][0], exp[i][0]);
EXPECT_EQ(out[i][1], exp[i][1]);
EXPECT_EQ(out[i][2], exp[i][2]);
EXPECT_EQ(out[i][3], exp[i][3]);
}
}
}
delete routine;
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
::testing::InitGoogleTest(&argc, argv); ::testing::InitGoogleTest(&argc, argv);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment