Cycles: Move utility atomics function to util_atomic.h
No functional changes, just better to keep all atomic function in a single place, they might become handy later.
This commit is contained in:
@@ -1028,6 +1028,7 @@ if env['OURPLATFORM']!='darwin':
|
|||||||
source.remove('shaders')
|
source.remove('shaders')
|
||||||
source.remove('osl')
|
source.remove('osl')
|
||||||
source=['intern/cycles/kernel/'+s for s in source]
|
source=['intern/cycles/kernel/'+s for s in source]
|
||||||
|
source.append('intern/cycles/util/util_atomic.h')
|
||||||
source.append('intern/cycles/util/util_color.h')
|
source.append('intern/cycles/util/util_color.h')
|
||||||
source.append('intern/cycles/util/util_half.h')
|
source.append('intern/cycles/util/util_half.h')
|
||||||
source.append('intern/cycles/util/util_math.h')
|
source.append('intern/cycles/util/util_math.h')
|
||||||
|
@@ -154,6 +154,7 @@ set(SRC_GEOM_HEADERS
|
|||||||
)
|
)
|
||||||
|
|
||||||
set(SRC_UTIL_HEADERS
|
set(SRC_UTIL_HEADERS
|
||||||
|
../util/util_atomic.h
|
||||||
../util/util_color.h
|
../util/util_color.h
|
||||||
../util/util_half.h
|
../util/util_half.h
|
||||||
../util/util_math.h
|
../util/util_math.h
|
||||||
|
@@ -22,28 +22,7 @@
|
|||||||
#include "kernel_types.h"
|
#include "kernel_types.h"
|
||||||
#include "kernel_globals.h"
|
#include "kernel_globals.h"
|
||||||
|
|
||||||
/* atomic_add_float function should be defined prior to its usage in kernel_passes.h */
|
#include "util_atomic.h"
|
||||||
#if defined(__SPLIT_KERNEL__) && defined(__WORK_STEALING__)
|
|
||||||
/* Utility functions for float atomics */
|
|
||||||
/* float atomics impl credits : http://suhorukov.blogspot.in/2011/12/opencl-11-atomic-operations-on-floating.html */
|
|
||||||
ccl_device_inline void atomic_add_float(volatile ccl_global float *source, const float operand) {
|
|
||||||
union {
|
|
||||||
unsigned int intVal;
|
|
||||||
float floatVal;
|
|
||||||
|
|
||||||
} newVal;
|
|
||||||
union {
|
|
||||||
unsigned int intVal;
|
|
||||||
float floatVal;
|
|
||||||
|
|
||||||
} prevVal;
|
|
||||||
do {
|
|
||||||
prevVal.floatVal = *source;
|
|
||||||
newVal.floatVal = prevVal.floatVal + operand;
|
|
||||||
|
|
||||||
} while (atomic_cmpxchg((volatile ccl_global unsigned int *)source, prevVal.intVal, newVal.intVal) != prevVal.intVal);
|
|
||||||
}
|
|
||||||
#endif // __SPLIT_KERNEL__ && __WORK_STEALING__
|
|
||||||
|
|
||||||
#ifdef __OSL__
|
#ifdef __OSL__
|
||||||
#include "osl_shader.h"
|
#include "osl_shader.h"
|
||||||
|
@@ -17,6 +17,8 @@
|
|||||||
#ifndef __UTIL_ATOMIC_H__
|
#ifndef __UTIL_ATOMIC_H__
|
||||||
#define __UTIL_ATOMIC_H__
|
#define __UTIL_ATOMIC_H__
|
||||||
|
|
||||||
|
#ifndef __KERNEL_GPU__
|
||||||
|
|
||||||
/* Using atomic ops header from Blender. */
|
/* Using atomic ops header from Blender. */
|
||||||
#include "atomic_ops.h"
|
#include "atomic_ops.h"
|
||||||
|
|
||||||
@@ -30,4 +32,34 @@ ATOMIC_INLINE void atomic_update_max_z(size_t *maximum_value, size_t value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else /* __KERNEL_GPU__ */
|
||||||
|
|
||||||
|
#ifdef __KERNEL_OPENCL__
|
||||||
|
|
||||||
|
/* Float atomics implementation credits:
|
||||||
|
* http://suhorukov.blogspot.in/2011/12/opencl-11-atomic-operations-on-floating.html
|
||||||
|
*/
|
||||||
|
ccl_device_inline void atomic_add_float(volatile ccl_global float *source,
|
||||||
|
const float operand)
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
unsigned int int_value;
|
||||||
|
float float_value;
|
||||||
|
} new_value;
|
||||||
|
union {
|
||||||
|
unsigned int int_value;
|
||||||
|
float float_value;
|
||||||
|
} prev_value;
|
||||||
|
do {
|
||||||
|
prev_value.float_value = *source;
|
||||||
|
new_value.float_value = prev_value.float_value + operand;
|
||||||
|
} while (atomic_cmpxchg((volatile ccl_global unsigned int *)source,
|
||||||
|
prev_value.int_value,
|
||||||
|
new_value.int_value) != prev_value.int_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __KERNEL_OPENCL__ */
|
||||||
|
|
||||||
|
#endif /* __KERNEL_GPU__ */
|
||||||
|
|
||||||
#endif /* __UTIL_ATOMIC_H__ */
|
#endif /* __UTIL_ATOMIC_H__ */
|
||||||
|
Reference in New Issue
Block a user