Home | History | Annotate | Download | only in cl_12
      1 /*
      2  * Copyright 2017 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can
      5  * be found in the LICENSE file.
      6  *
      7  */
      8 
      9 #ifndef SKC_ONCE_ATOMIC_CL
     10 #define SKC_ONCE_ATOMIC_CL
     11 
     12 //
     13 // git cl upload is bleating about needing an #include before and #if
     14 // so we're unneccesarily reloading the types and OpenCL header
     15 //
     16 
     17 #include "types.h"
     18 
     19 #if (__OPENCL_C_VERSION__ <= 120 /*CL_VERSION_1_2*/)
     20 
     21 #define SKC_ATOMIC_UINT                             uint
     22 #define SKC_ATOMIC_INT                              int
     23 
     24 #define SKC_ATOMIC_ADD_LOCAL_RELAXED_DEVICE(p,v)    atomic_add(p,v)
     25 #define SKC_ATOMIC_ADD_LOCAL_RELAXED_SUBGROUP(p,v)  atomic_add(p,v)
     26 
     27 #define SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(p,v)   atomic_add(p,v)
     28 #define SKC_ATOMIC_ADD_GLOBAL_RELAXED_SUBGROUP(p,v) atomic_add(p,v)
     29 
     30 #else // __OPENCL_C_VERSION__ > __CL_VERSION_1_2
     31 
     32 //
     33 // REMOVE THESE DEFINES ASAP -- ONLY HERE BECAUSE THE INTEL CODE
     34 // BUILDER UTILITY DOESN'T SUPPORT CREATING AN ATOMIC TYPE BUFFER
     35 //
     36 
     37 #ifdef SKC_SUPPORT_BROKEN_INTEL_CODE_BUILDER
     38 
     39 #define SKC_ATOMIC_UINT                             uint
     40 #define SKC_ATOMIC_CAST_LOCAL(p)                    (__local  atomic_uint volatile * restrict const)(p)
     41 #define SKC_ATOMIC_CAST_GLOBAL(p)                   (__global atomic_uint volatile * restrict const)(p)
     42 
     43 #else
     44 
     45 #define SKC_ATOMIC_UINT                             atomic_uint
     46 #define SKC_ATOMIC_CAST_LOCAL(p)                    (p)
     47 #define SKC_ATOMIC_CAST_GLOBAL(p)                   (p)
     48 
     49 #endif
     50 
     51 
     52 #define SKC_ATOMIC_ADD_LOCAL_RELAXED_DEVICE(p,v)    atomic_fetch_add_explicit(SKC_ATOMIC_CAST_LOCAL(p), \
     53                                                                               v,memory_order_relaxed,memory_scope_device)
     54 #define SKC_ATOMIC_ADD_LOCAL_RELAXED_SUBGROUP(p,v)  atomic_fetch_add_explicit(SKC_ATOMIC_CAST_LOCAL(p), \
     55                                                                               v,memory_order_relaxed,memory_scope_sub_group)
     56 
     57 #define SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(p,v)   atomic_fetch_add_explicit(SKC_ATOMIC_CAST_GLOBAL(p), \
     58                                                                               v,memory_order_relaxed,memory_scope_device)
     59 #define SKC_ATOMIC_ADD_GLOBAL_RELAXED_SUBGROUP(p,v) atomic_fetch_add_explicit(SKC_ATOMIC_CAST_GLOBAL(p), \
     60                                                                               v,memory_order_relaxed,memory_scope_sub_group)
     61 
     62 #endif
     63 
     64 //
     65 //
     66 //
     67 
     68 #endif // SKC_ONCE_ATOMIC_CL
     69 
     70 //
     71 //
     72 //
     73