Tizen 2.1 base
[platform/upstream/libbullet.git] / Extras / RigidBodyGpuPipeline / opencl / primitives / AdlPrimitives / Sort / RadixSort.h
1 /*
2                 2011 Takahiro Harada
3 */
4
5 #pragma once
6
7 #include <Adl/Adl.h>
8 #include <AdlPrimitives/Math/Math.h>
9 #include <AdlPrimitives/Sort/SortData.h>
10 #include <AdlPrimitives/Scan/PrefixScan.h>
11
12 namespace adl
13 {
14
15 class RadixSortBase
16 {
17         public:
18                 enum Option
19                 {
20                         SORT_SIMPLE,
21                         SORT_STANDARD, 
22                         SORT_ADVANCED
23                 };
24 };
25
26 template<DeviceType TYPE>
27 class RadixSort : public RadixSortBase
28 {
29         public:
30                 struct Data
31                 {
32                         Option m_option;
33                         const Device* m_deviceData;
34                         typename PrefixScan<TYPE>::Data* m_scanData;
35                         int m_maxSize;
36                 };
37                 
38
39                 static
40                 Data* allocate(const Device* deviceData, int maxSize, Option option = SORT_STANDARD);
41
42                 static
43                 void deallocate(Data* data);
44
45                 static
46                 void execute(Data* data, Buffer<SortData>& inout, int n, int sortBits = 32);
47 };
48
49
50 #include <AdlPrimitives/Sort/RadixSort.inl>
51 #include <AdlPrimitives/Sort/RadixSortHost.inl>
52
53 };