xref: /llvm-project/llvm/lib/Target/NVPTX/cl_common_defines.h (revision 5f83e477c30c9a2ddb60b4994fe7dae05de0aef8)
1*5f83e477SAlp Toker #ifndef CL_COMMON_DEFINES_H
2*5f83e477SAlp Toker #define CL_COMMON_DEFINES_H
3ae556d3eSJustin Holewinski // This file includes defines that are common to both kernel code and
4ae556d3eSJustin Holewinski // the NVPTX back-end.
5ae556d3eSJustin Holewinski 
6ae556d3eSJustin Holewinski //
7ae556d3eSJustin Holewinski // Common defines for Image intrinsics
8ae556d3eSJustin Holewinski // Channel order
9ae556d3eSJustin Holewinski enum {
10ae556d3eSJustin Holewinski   CLK_R = 0x10B0,
11ae556d3eSJustin Holewinski   CLK_A = 0x10B1,
12ae556d3eSJustin Holewinski   CLK_RG = 0x10B2,
13ae556d3eSJustin Holewinski   CLK_RA = 0x10B3,
14ae556d3eSJustin Holewinski   CLK_RGB = 0x10B4,
15ae556d3eSJustin Holewinski   CLK_RGBA = 0x10B5,
16ae556d3eSJustin Holewinski   CLK_BGRA = 0x10B6,
17ae556d3eSJustin Holewinski   CLK_ARGB = 0x10B7,
18ae556d3eSJustin Holewinski 
19ae556d3eSJustin Holewinski #if (__NV_CL_C_VERSION == __NV_CL_C_VERSION_1_0)
20ae556d3eSJustin Holewinski   CLK_xRGB = 0x10B7,
21ae556d3eSJustin Holewinski #endif
22ae556d3eSJustin Holewinski 
23ae556d3eSJustin Holewinski   CLK_INTENSITY = 0x10B8,
24ae556d3eSJustin Holewinski   CLK_LUMINANCE = 0x10B9
25ae556d3eSJustin Holewinski 
26ae556d3eSJustin Holewinski #if (__NV_CL_C_VERSION >= __NV_CL_C_VERSION_1_1)
27ae556d3eSJustin Holewinski       ,
28ae556d3eSJustin Holewinski   CLK_Rx = 0x10BA,
29ae556d3eSJustin Holewinski   CLK_RGx = 0x10BB,
30ae556d3eSJustin Holewinski   CLK_RGBx = 0x10BC
31ae556d3eSJustin Holewinski #endif
32ae556d3eSJustin Holewinski };
33ae556d3eSJustin Holewinski 
34ae556d3eSJustin Holewinski typedef enum clk_channel_type {
35ae556d3eSJustin Holewinski   // valid formats for float return types
36ae556d3eSJustin Holewinski   CLK_SNORM_INT8 = 0x10D0,  // four channel RGBA unorm8
37ae556d3eSJustin Holewinski   CLK_SNORM_INT16 = 0x10D1, // four channel RGBA unorm16
38ae556d3eSJustin Holewinski   CLK_UNORM_INT8 = 0x10D2,  // four channel RGBA unorm8
39ae556d3eSJustin Holewinski   CLK_UNORM_INT16 = 0x10D3, // four channel RGBA unorm16
40ae556d3eSJustin Holewinski   CLK_HALF_FLOAT = 0x10DD,  // four channel RGBA half
41ae556d3eSJustin Holewinski   CLK_FLOAT = 0x10DE,       // four channel RGBA float
42ae556d3eSJustin Holewinski 
43ae556d3eSJustin Holewinski #if (__NV_CL_C_VERSION >= __NV_CL_C_VERSION_1_1)
44ae556d3eSJustin Holewinski   CLK_UNORM_SHORT_565 = 0x10D4,
45ae556d3eSJustin Holewinski   CLK_UNORM_SHORT_555 = 0x10D5,
46ae556d3eSJustin Holewinski   CLK_UNORM_INT_101010 = 0x10D6,
47ae556d3eSJustin Holewinski #endif
48ae556d3eSJustin Holewinski 
49ae556d3eSJustin Holewinski   // valid only for integer return types
50ae556d3eSJustin Holewinski   CLK_SIGNED_INT8 = 0x10D7,
51ae556d3eSJustin Holewinski   CLK_SIGNED_INT16 = 0x10D8,
52ae556d3eSJustin Holewinski   CLK_SIGNED_INT32 = 0x10D9,
53ae556d3eSJustin Holewinski   CLK_UNSIGNED_INT8 = 0x10DA,
54ae556d3eSJustin Holewinski   CLK_UNSIGNED_INT16 = 0x10DB,
55ae556d3eSJustin Holewinski   CLK_UNSIGNED_INT32 = 0x10DC,
56ae556d3eSJustin Holewinski 
57ae556d3eSJustin Holewinski   // CI SPI for CPU
58ae556d3eSJustin Holewinski   __CLK_UNORM_INT8888,  // four channel ARGB unorm8
59ae556d3eSJustin Holewinski   __CLK_UNORM_INT8888R, // four channel BGRA unorm8
60ae556d3eSJustin Holewinski 
61ae556d3eSJustin Holewinski   __CLK_VALID_IMAGE_TYPE_COUNT,
62ae556d3eSJustin Holewinski   __CLK_INVALID_IMAGE_TYPE = __CLK_VALID_IMAGE_TYPE_COUNT,
63ae556d3eSJustin Holewinski   __CLK_VALID_IMAGE_TYPE_MASK_BITS = 4, // number of bits required to
64ae556d3eSJustin Holewinski                                         // represent any image type
65ae556d3eSJustin Holewinski   __CLK_VALID_IMAGE_TYPE_MASK = (1 << __CLK_VALID_IMAGE_TYPE_MASK_BITS) - 1
66ae556d3eSJustin Holewinski } clk_channel_type;
67ae556d3eSJustin Holewinski 
68ae556d3eSJustin Holewinski typedef enum clk_sampler_type {
69ae556d3eSJustin Holewinski   __CLK_ADDRESS_BASE = 0,
70ae556d3eSJustin Holewinski   CLK_ADDRESS_NONE = 0 << __CLK_ADDRESS_BASE,
71ae556d3eSJustin Holewinski   CLK_ADDRESS_CLAMP = 1 << __CLK_ADDRESS_BASE,
72ae556d3eSJustin Holewinski   CLK_ADDRESS_CLAMP_TO_EDGE = 2 << __CLK_ADDRESS_BASE,
73ae556d3eSJustin Holewinski   CLK_ADDRESS_REPEAT = 3 << __CLK_ADDRESS_BASE,
74ae556d3eSJustin Holewinski   CLK_ADDRESS_MIRROR = 4 << __CLK_ADDRESS_BASE,
75ae556d3eSJustin Holewinski 
76ae556d3eSJustin Holewinski #if (__NV_CL_C_VERSION >= __NV_CL_C_VERSION_1_1)
77ae556d3eSJustin Holewinski   CLK_ADDRESS_MIRRORED_REPEAT = CLK_ADDRESS_MIRROR,
78ae556d3eSJustin Holewinski #endif
790497ab14SJustin Holewinski   __CLK_ADDRESS_MASK =
800497ab14SJustin Holewinski       CLK_ADDRESS_NONE | CLK_ADDRESS_CLAMP | CLK_ADDRESS_CLAMP_TO_EDGE |
81ae556d3eSJustin Holewinski       CLK_ADDRESS_REPEAT | CLK_ADDRESS_MIRROR,
82ae556d3eSJustin Holewinski   __CLK_ADDRESS_BITS = 3, // number of bits required to
83ae556d3eSJustin Holewinski                           // represent address info
84ae556d3eSJustin Holewinski 
85ae556d3eSJustin Holewinski   __CLK_NORMALIZED_BASE = __CLK_ADDRESS_BITS,
86ae556d3eSJustin Holewinski   CLK_NORMALIZED_COORDS_FALSE = 0,
87ae556d3eSJustin Holewinski   CLK_NORMALIZED_COORDS_TRUE = 1 << __CLK_NORMALIZED_BASE,
880497ab14SJustin Holewinski   __CLK_NORMALIZED_MASK =
890497ab14SJustin Holewinski       CLK_NORMALIZED_COORDS_FALSE | CLK_NORMALIZED_COORDS_TRUE,
90ae556d3eSJustin Holewinski   __CLK_NORMALIZED_BITS = 1, // number of bits required to
91ae556d3eSJustin Holewinski                              // represent normalization
92ae556d3eSJustin Holewinski 
930497ab14SJustin Holewinski   __CLK_FILTER_BASE = __CLK_NORMALIZED_BASE + __CLK_NORMALIZED_BITS,
94ae556d3eSJustin Holewinski   CLK_FILTER_NEAREST = 0 << __CLK_FILTER_BASE,
95ae556d3eSJustin Holewinski   CLK_FILTER_LINEAR = 1 << __CLK_FILTER_BASE,
96ae556d3eSJustin Holewinski   CLK_FILTER_ANISOTROPIC = 2 << __CLK_FILTER_BASE,
970497ab14SJustin Holewinski   __CLK_FILTER_MASK =
980497ab14SJustin Holewinski       CLK_FILTER_NEAREST | CLK_FILTER_LINEAR | CLK_FILTER_ANISOTROPIC,
99ae556d3eSJustin Holewinski   __CLK_FILTER_BITS = 2, // number of bits required to
100ae556d3eSJustin Holewinski                          // represent address info
101ae556d3eSJustin Holewinski 
102ae556d3eSJustin Holewinski   __CLK_MIP_BASE = __CLK_FILTER_BASE + __CLK_FILTER_BITS,
103ae556d3eSJustin Holewinski   CLK_MIP_NEAREST = 0 << __CLK_MIP_BASE,
104ae556d3eSJustin Holewinski   CLK_MIP_LINEAR = 1 << __CLK_MIP_BASE,
105ae556d3eSJustin Holewinski   CLK_MIP_ANISOTROPIC = 2 << __CLK_MIP_BASE,
1060497ab14SJustin Holewinski   __CLK_MIP_MASK = CLK_MIP_NEAREST | CLK_MIP_LINEAR | CLK_MIP_ANISOTROPIC,
107ae556d3eSJustin Holewinski   __CLK_MIP_BITS = 2,
108ae556d3eSJustin Holewinski 
109ae556d3eSJustin Holewinski   __CLK_SAMPLER_BITS = __CLK_MIP_BASE + __CLK_MIP_BITS,
110ae556d3eSJustin Holewinski   __CLK_SAMPLER_MASK = __CLK_MIP_MASK | __CLK_FILTER_MASK |
111ae556d3eSJustin Holewinski                        __CLK_NORMALIZED_MASK | __CLK_ADDRESS_MASK,
112ae556d3eSJustin Holewinski 
113ae556d3eSJustin Holewinski   __CLK_ANISOTROPIC_RATIO_BITS = 5,
1140497ab14SJustin Holewinski   __CLK_ANISOTROPIC_RATIO_MASK =
1150497ab14SJustin Holewinski       (int) 0x80000000 >> (__CLK_ANISOTROPIC_RATIO_BITS - 1)
116ae556d3eSJustin Holewinski } clk_sampler_type;
117ae556d3eSJustin Holewinski 
118ae556d3eSJustin Holewinski // Memory synchronization
119ae556d3eSJustin Holewinski #define CLK_LOCAL_MEM_FENCE (1 << 0)
120ae556d3eSJustin Holewinski #define CLK_GLOBAL_MEM_FENCE (1 << 1)
121ae556d3eSJustin Holewinski 
122*5f83e477SAlp Toker #endif // CL_COMMON_DEFINES_H
123