72 lines
2.3 KiB
Perl
72 lines
2.3 KiB
Perl
|
#!/usr/bin/perl -w
|
||
|
|
||
|
# Generate trivial test cases to exercise input types.
|
||
|
|
||
|
use strict;
|
||
|
|
||
|
# deliberately non-exhaustive
|
||
|
my @basicTypes = ("half", "float", # "double",
|
||
|
"char", "short", # "int", "long",
|
||
|
"uchar", "ushort", # "uint", "ulong",
|
||
|
"bool",
|
||
|
"rs_matrix2x2", # "rs_matrix3x3", "rs_matrix4x4",
|
||
|
"MyStruct");
|
||
|
|
||
|
# 1 signifies non-vector
|
||
|
# 3 is not supported for exported types
|
||
|
my @vecLengths = (1, 2, 4);
|
||
|
|
||
|
sub isVectorEligible {
|
||
|
my ($type) = @_;
|
||
|
|
||
|
# There are no bool vectors or struct vectors
|
||
|
return 0 if ($type eq "bool") || ($type eq "MyStruct");
|
||
|
|
||
|
# There are no matrix or object vectors
|
||
|
return 0 if (substr($type, 0, 3) eq "rs_");
|
||
|
|
||
|
# Else ok
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
print "// -Wall -Werror\n";
|
||
|
print "#pragma version(1)\n";
|
||
|
print "#pragma rs java_package_name(inputs)\n\n";
|
||
|
print "// This test case was created by $0.\n";
|
||
|
print "// It exercises various legal combinations of inputs and special parameters,\n";
|
||
|
print "// so that we can ensure\n";
|
||
|
print "// (a) We do not choke when compiling them\n";
|
||
|
print "// (b) We reflect them correctly\n\n";
|
||
|
print "// One example struct type\n";
|
||
|
print "typedef struct MyStruct { float f; double d; } MyStruct;\n\n";
|
||
|
print "// Trivial combiner shared by all test cases\n";
|
||
|
print "static void combiner(int *accum, const int *other) { }\n";
|
||
|
|
||
|
foreach my $basicTypeA (@basicTypes) {
|
||
|
foreach my $vecLenA (@vecLengths) {
|
||
|
next if ($vecLenA > 1) && !isVectorEligible($basicTypeA);
|
||
|
|
||
|
my $eltNameA = $basicTypeA;
|
||
|
$eltNameA .= $vecLenA if ($vecLenA > 1);
|
||
|
|
||
|
foreach my $basicTypeB (@basicTypes) {
|
||
|
foreach my $vecLenB (@vecLengths) {
|
||
|
next if ($vecLenB > 1) && !isVectorEligible($basicTypeB);
|
||
|
|
||
|
my $eltNameB = $basicTypeB;
|
||
|
$eltNameB .= $vecLenB if ($vecLenB > 1);
|
||
|
|
||
|
for (my $hasSpecial = 0; $hasSpecial <= 1; ++$hasSpecial) {
|
||
|
my $reduceName = "my_${eltNameA}_${eltNameB}_${hasSpecial}";
|
||
|
my $accumName = "${reduceName}_accum";
|
||
|
print "\n";
|
||
|
print "#pragma rs reduce(${reduceName}) accumulator(${accumName}) combiner(combiner)\n";
|
||
|
print "static void ${accumName}(int *accum, ${eltNameA} a, ${eltNameB} b";
|
||
|
print ", rs_kernel_context context" if ($hasSpecial);
|
||
|
print ") { }\n";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|