File: func_template_2.ispc

package info (click to toggle)
ispc 1.28.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 97,620 kB
  • sloc: cpp: 77,067; python: 8,303; yacc: 3,337; lex: 1,126; ansic: 631; sh: 475; makefile: 17
file content (23 lines) | stat: -rw-r--r-- 1,031 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Tests template instantiation involving pointers/arrays with variability
// resolution.

// RUN: %{ispc}  %s --emit-llvm-text --target=host -o - | FileCheck %s

// CHECK: define void @foo
// CHECK: call void @aos_to_soa2_ispc___vyivyi___un_3C_uni_3E_un_3C_vyi_3E_un_3C_vyi_3E_REFCvyi({{(i32*|ptr)}}
// CHECK: call void @aos_to_soa2_ispc___vyfvyi___un_3C_unf_3E_un_3C_vyf_3E_un_3C_vyf_3E_REFCvyi({{(float*|ptr)}}

template <typename T, typename C>
noinline void aos_to_soa2_ispc(uniform T src[], varying T *uniform v0, varying T *uniform v1, const C &ind) {
    const varying T src0 = src[programIndex];
    const varying T src1 = src[programCount + programIndex];

    *v0 = shuffle(src0, src1, ind);
    *v1 = shuffle(src0, src1, ind);
}

void foo(uniform float srcf[], varying float *uniform v0f, varying float *uniform v1f, uniform int srci[],
         varying int *uniform v0i, varying int *uniform v1i, int ind) {
    aos_to_soa2_ispc<int, int>(srci, v0i, v1i, ind);
    aos_to_soa2_ispc<float, int>(srcf, v0f, v1f, ind);
}