aboutsummaryrefslogtreecommitdiffstats
path: root/resources/clImplCustomCode.java
blob: bee5342535229a004f99c69651be73113832f772 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

    static final DynamicLibraryBundle dynamicLookupHelper;
    protected static final CLProcAddressTable addressTable;

    static {
      addressTable = new CLProcAddressTable();
      if(null==addressTable) {
        throw new RuntimeException("Couldn't instantiate ALProcAddressTable");
      }
  
      dynamicLookupHelper = AccessController.doPrivileged(new PrivilegedAction<DynamicLibraryBundle>() {
                                  public DynamicLibraryBundle run() {
                                      final DynamicLibraryBundle bundle =  new DynamicLibraryBundle(new CLDynamicLibraryBundleInfo());
                                      if(null==bundle) {
                                        throw new RuntimeException("Null CLDynamicLookupHelper");
                                      }
                                      if(!bundle.isToolLibLoaded()) {
                                        throw new RuntimeException("Couln't load native CL library");
                                      }
                                      if(!bundle.isLibComplete()) {
                                        throw new RuntimeException("Couln't load native CL/JNI glue library");
                                      }
                                      addressTable.reset(bundle);
                                      return bundle;
                                  } } );
    }

    public static CLProcAddressTable getCLProcAddressTable() { return addressTable; }

    static long clGetExtensionFunctionAddress(long clGetExtensionFunctionAddressHandle, java.lang.String procname)
    {
        if (clGetExtensionFunctionAddressHandle == 0) {
            throw new RuntimeException("Passed null pointer for method \"clGetExtensionFunctionAddress\"");
        }
        return dispatch_clGetExtensionFunctionAddressStatic(procname, clGetExtensionFunctionAddressHandle);
    }

    public CLAbstractImpl() {
    }

    /** Entry point (through function pointer) to C language function: <br> <code> void* clGetExtensionFunctionAddress(const char *  fname); </code>    */
    long clGetExtensionFunctionAddress(String fname)  {

        final long __addr_ = addressTable._addressof_clGetExtensionFunctionAddress;
        if (__addr_ == 0) {
            throw new UnsupportedOperationException("Method \"clGetExtensionFunctionAddress\" not available");
        }
        return dispatch_clGetExtensionFunctionAddressStatic(fname, __addr_);
    }

    /** Entry point (through function pointer) to C language function: <br> <code> void* clGetExtensionFunctionAddress(const char *  fname); </code>    */
    private static native long dispatch_clGetExtensionFunctionAddressStatic(String fname, long procAddress);