Jogamp
Fix CLProgramTest for Intel OpenCL
authorWade Walker <wwalker3@austin.rr.com>
Sun, 25 Oct 2015 01:49:00 +0000 (18:49 -0700)
committerWade Walker <wwalker3@austin.rr.com>
Sun, 8 Nov 2015 20:05:34 +0000 (14:05 -0600)
Added a couple of differences in test results for programs recreated
from binaries (the programs are executable and have binary length > 0),
and avoided the CL kernel creation test on a binary because it segfaults
like it does on AMD drivers.

src/com/jogamp/opencl/CLPlatform.java
test/com/jogamp/opencl/CLProgramTest.java

index 77da10b..3426546 100644 (file)
@@ -468,6 +468,14 @@ public class CLPlatform {
     public boolean isVendorAMD() {
         return getVendor().contains("Advanced Micro Devices");
     }
+
+    /**
+     * @return true if the vendor is Intel.
+     */
+    public boolean isVendorIntel() {
+        return getVendor().contains("Intel");
+    }
+
     /**
      * Returns the ICD suffix.
      */
index 5946deb..ae09d2c 100644 (file)
@@ -147,6 +147,7 @@ public class CLProgramTest extends UITestCase {
         assertNotNull(program.getCLDevices());
         assertEquals(program.getCLDevices().length, 0);
 
+        // make sure kernel creation does nothing after program release 
         {
             final Map<String, CLKernel> kernels = program.createCLKernels();
             assertNotNull(kernels);
@@ -156,23 +157,31 @@ public class CLProgramTest extends UITestCase {
 
         program = context.createProgram(binaries);
 
-        assertFalse(program.isExecutable());
-
+        // as of 10/25/2015, Intel shows recreated programs as executable 
+        if(!context.getPlatform().isVendorIntel())
+               assertFalse(program.isExecutable());
+        else
+               assertTrue(program.isExecutable());
+               
         assertNotNull(program.getCLDevices());
         assertTrue(program.getCLDevices().length != 0);
 
         assertNotNull(program.getBinaries());
-        assertEquals(program.getBinaries().size(), 0);
+        // as of 10/25/2015, Intel shows recreated programs binaries as having size 
+        if(!context.getPlatform().isVendorIntel())
+               assertEquals(program.getBinaries().size(), 0);
+        else
+               assertTrue(program.getBinaries().size() > 0);
 
         assertNotNull(program.getBuildLog());
         assertTrue(program.getBuildLog().length() != 0);
 
         assertNotNull(program.getSource());
-        assertEquals(program.getSource().length(), 0);
+               assertEquals(program.getSource().length(), 0);
 
-        // only test kernel creation error on unbuilt program if we're not on AMD -- as of
-        // 3/8/2014, AMD drivers segfault on this instead of returning CL_INVALID_PROGRAM_EXECUTABLE
-        if(!context.getPlatform().isVendorAMD()) {
+        // only test kernel creation error on unbuilt program if we're not on AMD or Intel -- as of
+        // (3/8/2014, 10/31/2015) (AMD, Intel) drivers segfault on this instead of returning CL_INVALID_PROGRAM_EXECUTABLE
+        if(!context.getPlatform().isVendorAMD() && !context.getPlatform().isVendorIntel()) {
             try{
                 final Map<String, CLKernel> kernels = program.createCLKernels();
                 fail("expected an exception from createCLKernels but got: "+kernels);
http://JogAmp.org git info: FAQ, tutorial and man pages.