Jogamp
Fix CL-GL interoperability tests on Mac.
authorWade Walker <wwalker3@austin.rr.com>
Sun, 6 Apr 2014 20:05:46 +0000 (15:05 -0500)
committerWade Walker <wwalker3@austin.rr.com>
Sun, 6 Apr 2014 20:05:46 +0000 (15:05 -0500)
Fixed detection of compatible interoperability platforms (was silently
skipping platform because GL vendor was Nvidia, but CL vendor was
Apple). Also fixed CL kernel syntax error about signed-unsigned
comparison that ATI's driver on Windows didn't find, and fixed the CL
memory object to be write-only instead of read-only (which ATI's Windows
driver just ignored).

src/com/jogamp/opencl/util/CLPlatformFilters.java
test/com/jogamp/opencl/gl/CLGLTest.java

index 14e1507..451c6b1 100644 (file)
@@ -100,15 +100,17 @@ public class CLPlatformFilters {
     }
     
     /**
-     * We need this test because on at least some AMD cards, the GL vendor is ATI,
-     * but the CL vendor is AMD.
+     * We need this test because:
+     *  - On at least some AMD cards, the GL vendor is ATI, but the CL vendor is AMD.
+     *  - On at least some Macs, the GL vendor is Nvidia, but the CL vendor is Apple.
      * @param glVendor OpenGL vendor string.
      * @param clVendor OpenCL vendor string.
      * @return true if the strings are either the same, or indicate that they're part of the same card.
      */
     private static boolean areVendorsCompatible(final String glVendor, final String clVendor) {
         return(   clVendor.equals(glVendor)
-               || (glVendor.contains("ATI Technologies") && clVendor.contains("Advanced Micro Devices")));
+               || (glVendor.contains("ATI Technologies") && clVendor.contains("Advanced Micro Devices"))
+               || (glVendor.contains("NVIDIA Corporation") && clVendor.contains("Apple")));
     }
 
     /**
index 8c729c0..8c47700 100644 (file)
@@ -284,13 +284,13 @@ public class CLGLTest extends UITestCase {
 
             // create CLGL buffer
             ByteBuffer bufferCL = Buffers.newDirectByteBuffer(texWidth*texHeight*4);
-            CLGLTexture2d<ByteBuffer> clTexture = clglcontext.createFromGLTexture2d(bufferCL, GL2.GL_TEXTURE_2D, id[0], 0, CLBuffer.Mem.READ_ONLY);
+            CLGLTexture2d<ByteBuffer> clTexture = clglcontext.createFromGLTexture2d(bufferCL, GL2.GL_TEXTURE_2D, id[0], 0, CLBuffer.Mem.WRITE_ONLY);
 
             // set texel values to a formula that can be read back and verified
             String sourceCL = "__kernel void writeTexture (__write_only image2d_t imageTex, unsigned w, unsigned h ) \n" +
                     "{                                                                        \n" +
-                    "    for(int y=1; y<=h; ++y) {                                            \n" +
-                    "        for(int x=1; x<=w; ++x) {                                        \n" +
+                    "    for(unsigned y=1; y<=h; ++y) {                                       \n" +
+                    "        for(unsigned x=1; x<=w; ++x) {                                   \n" +
                     "            write_imagef(imageTex, (int2)(x-1,y-1), (float4)(((float)x)/((float)(4*w)), ((float)y)/((float)(4*h)), 0.0f, 1.0f)); \n" +
                     "        }                                                                \n" +
                     "    }                                                                    \n" +
http://JogAmp.org git info: FAQ, tutorial and man pages.