@@ -26,14 +26,13 @@ namespace s = sycl;
26
26
27
27
template <int unique_number> class kernel_class ;
28
28
29
- void validateReadData (s::cl_float4 ReadData, s::cl_float4 ExpectedColor,
30
- s::cl_int precision = 1 ) {
29
+ void validateReadData (s::float4 ReadData, s::float4 ExpectedColor,
30
+ int precision = 1 ) {
31
31
// Maximum difference of 1.5 ULP is allowed when precision = 1.
32
- s::cl_int4 PixelDataInt = ReadData.template as <s::cl_int4>();
33
- s::cl_int4 ExpectedDataInt = ExpectedColor.template as <s::cl_int4>();
34
- s::cl_int4 Diff = ExpectedDataInt - PixelDataInt;
35
- s::cl_int DataIsCorrect =
36
- s::all ((Diff <= precision) && (Diff >= (-precision)));
32
+ s::int4 PixelDataInt = ReadData.template as <s::int4>();
33
+ s::int4 ExpectedDataInt = ExpectedColor.template as <s::int4>();
34
+ s::int4 Diff = ExpectedDataInt - PixelDataInt;
35
+ int DataIsCorrect = s::all ((Diff <= precision) && (Diff >= (-precision)));
37
36
#if DEBUG_OUTPUT
38
37
{
39
38
if (DataIsCorrect) {
@@ -49,28 +48,30 @@ void validateReadData(s::cl_float4 ReadData, s::cl_float4 ExpectedColor,
49
48
Diff.dump ();
50
49
}
51
50
#else
52
- { assert (DataIsCorrect); }
51
+ {
52
+ assert (DataIsCorrect);
53
+ }
53
54
#endif
54
55
}
55
56
56
57
template <int i>
57
- void checkReadSampler (char *host_ptr, s::sampler Sampler, s::cl_float4 Coord,
58
- s::cl_float4 ExpectedColor, s::cl_int precision = 1 ) {
58
+ void checkReadSampler (char *host_ptr, s::sampler Sampler, s::float4 Coord,
59
+ s::float4 ExpectedColor, int precision = 1 ) {
59
60
60
- s::cl_float4 ReadData;
61
+ s::float4 ReadData;
61
62
{
62
63
// image with dim = 3
63
64
s::image<3 > Img (host_ptr, s::image_channel_order::rgba,
64
65
s::image_channel_type::snorm_int8, s::range<3 >{2 , 3 , 4 });
65
66
s::queue myQueue;
66
- s::buffer<s::cl_float4 , 1 > ReadDataBuf (&ReadData, s::range<1 >(1 ));
67
+ s::buffer<s::float4 , 1 > ReadDataBuf (&ReadData, s::range<1 >(1 ));
67
68
myQueue.submit ([&](s::handler &cgh) {
68
- auto ReadAcc = Img.get_access <s::cl_float4 , s::access::mode::read>(cgh);
69
- s::accessor<s::cl_float4 , 1 , s::access::mode::write> ReadDataBufAcc (
69
+ auto ReadAcc = Img.get_access <s::float4 , s::access::mode::read>(cgh);
70
+ s::accessor<s::float4 , 1 , s::access::mode::write> ReadDataBufAcc (
70
71
ReadDataBuf, cgh);
71
72
72
73
cgh.single_task <class kernel_class <i>>([=]() {
73
- s::cl_float4 RetColor = ReadAcc.read (Coord, Sampler);
74
+ s::float4 RetColor = ReadAcc.read (Coord, Sampler);
74
75
ReadDataBufAcc[0 ] = RetColor;
75
76
});
76
77
});
@@ -90,9 +91,8 @@ void checkSamplerNearest() {
90
91
// addressing_mode::mirrored_repeat
91
92
{
92
93
// Out-of-range mirrored_repeat mode
93
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
94
- s::cl_float4 ExpectedValue =
95
- s::cl_float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
94
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
95
+ s::float4 ExpectedValue = s::float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
96
96
auto Sampler = s::sampler (s::coordinate_normalization_mode::normalized,
97
97
s::addressing_mode::mirrored_repeat,
98
98
s::filtering_mode::nearest);
@@ -102,9 +102,8 @@ void checkSamplerNearest() {
102
102
// addressing_mode::repeat
103
103
{
104
104
// Out-of-range repeat mode
105
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
106
- s::cl_float4 ExpectedValue =
107
- s::cl_float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
105
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
106
+ s::float4 ExpectedValue = s::float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
108
107
auto Sampler =
109
108
s::sampler (s::coordinate_normalization_mode::normalized,
110
109
s::addressing_mode::repeat, s::filtering_mode::nearest);
@@ -114,9 +113,8 @@ void checkSamplerNearest() {
114
113
// addressing_mode::clamp_to_edge
115
114
{
116
115
// Out-of-range Edge Color
117
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
118
- s::cl_float4 ExpectedValue =
119
- s::cl_float4 (88 .0f , 89 .0f , 90 .0f , 91 .0f ) / 127 .0f ;
116
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
117
+ s::float4 ExpectedValue = s::float4 (88 .0f , 89 .0f , 90 .0f , 91 .0f ) / 127 .0f ;
120
118
auto Sampler = s::sampler (s::coordinate_normalization_mode::normalized,
121
119
s::addressing_mode::clamp_to_edge,
122
120
s::filtering_mode::nearest);
@@ -126,8 +124,8 @@ void checkSamplerNearest() {
126
124
// addressing_mode::clamp
127
125
{
128
126
// Out-of-range Border Color
129
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
130
- s::cl_float4 ExpectedValue = s::cl_float4 (0 .0f , 0 .0f , 0 .0f , 0 .0f );
127
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
128
+ s::float4 ExpectedValue = s::float4 (0 .0f , 0 .0f , 0 .0f , 0 .0f );
131
129
auto Sampler =
132
130
s::sampler (s::coordinate_normalization_mode::normalized,
133
131
s::addressing_mode::clamp, s::filtering_mode::nearest);
@@ -137,9 +135,8 @@ void checkSamplerNearest() {
137
135
// addressing_mode::none
138
136
{
139
137
// In-range for consistent return value.
140
- s::cl_float4 Coord (0 .0f , 0 .5f , 0 .75f , 0 .0f );
141
- s::cl_float4 ExpectedValue =
142
- s::cl_float4 (80 .0f , 81 .0f , 82 .0f , 83 .0f ) / 127 .0f ;
138
+ s::float4 Coord (0 .0f , 0 .5f , 0 .75f , 0 .0f );
139
+ s::float4 ExpectedValue = s::float4 (80 .0f , 81 .0f , 82 .0f , 83 .0f ) / 127 .0f ;
143
140
auto Sampler =
144
141
s::sampler (s::coordinate_normalization_mode::normalized,
145
142
s::addressing_mode::none, s::filtering_mode::nearest);
@@ -149,9 +146,8 @@ void checkSamplerNearest() {
149
146
// B. coordinate_normalization_mode::unnormalized
150
147
// addressing_mode::clamp_to_edge
151
148
{
152
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
153
- s::cl_float4 ExpectedValue =
154
- s::cl_float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
149
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
150
+ s::float4 ExpectedValue = s::float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
155
151
auto Sampler = s::sampler (s::coordinate_normalization_mode::unnormalized,
156
152
s::addressing_mode::clamp_to_edge,
157
153
s::filtering_mode::nearest);
@@ -160,9 +156,8 @@ void checkSamplerNearest() {
160
156
161
157
// addressing_mode::clamp
162
158
{
163
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
164
- s::cl_float4 ExpectedValue =
165
- s::cl_float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
159
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
160
+ s::float4 ExpectedValue = s::float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
166
161
auto Sampler =
167
162
s::sampler (s::coordinate_normalization_mode::unnormalized,
168
163
s::addressing_mode::clamp, s::filtering_mode::nearest);
@@ -172,9 +167,8 @@ void checkSamplerNearest() {
172
167
// addressing_mode::none
173
168
{
174
169
// In-range for consistent return value.
175
- s::cl_float4 Coord (0 .0f , 1 .0f , 2 .0f , 0 .0f );
176
- s::cl_float4 ExpectedValue =
177
- s::cl_float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
170
+ s::float4 Coord (0 .0f , 1 .0f , 2 .0f , 0 .0f );
171
+ s::float4 ExpectedValue = s::float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
178
172
auto Sampler =
179
173
s::sampler (s::coordinate_normalization_mode::unnormalized,
180
174
s::addressing_mode::none, s::filtering_mode::nearest);
@@ -190,7 +184,7 @@ void checkSamplerNearest() {
190
184
// value of 15000 ULP is used.
191
185
void checkSamplerLinear () {
192
186
193
- const s::cl_int PrecisionInULP = 15000 ;
187
+ const int PrecisionInULP = 15000 ;
194
188
// create image:
195
189
char host_ptr[100 ];
196
190
for (int i = 0 ; i < 100 ; i++)
@@ -201,9 +195,8 @@ void checkSamplerLinear() {
201
195
// addressing_mode::mirrored_repeat
202
196
{
203
197
// Out-of-range mirrored_repeat mode
204
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
205
- s::cl_float4 ExpectedValue =
206
- s::cl_float4 (44 .0f , 45 .0f , 46 .0f , 47 .0f ) / 127 .0f ;
198
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
199
+ s::float4 ExpectedValue = s::float4 (44 .0f , 45 .0f , 46 .0f , 47 .0f ) / 127 .0f ;
207
200
auto Sampler = s::sampler (s::coordinate_normalization_mode::normalized,
208
201
s::addressing_mode::mirrored_repeat,
209
202
s::filtering_mode::linear);
@@ -212,9 +205,8 @@ void checkSamplerLinear() {
212
205
}
213
206
{
214
207
// In-range mirrored_repeat mode
215
- s::cl_float4 Coord (0 .0f , 0 .25f , 0 .55f , 0 .0f );
216
- s::cl_float4 ExpectedValue =
217
- s::cl_float4 (42 .8f , 43 .8f , 44 .8f , 45 .8f ) / 127 .0f ;
208
+ s::float4 Coord (0 .0f , 0 .25f , 0 .55f , 0 .0f );
209
+ s::float4 ExpectedValue = s::float4 (42 .8f , 43 .8f , 44 .8f , 45 .8f ) / 127 .0f ;
218
210
auto Sampler = s::sampler (s::coordinate_normalization_mode::normalized,
219
211
s::addressing_mode::mirrored_repeat,
220
212
s::filtering_mode::linear);
@@ -225,9 +217,8 @@ void checkSamplerLinear() {
225
217
// addressing_mode::repeat
226
218
{
227
219
// Out-of-range repeat mode
228
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
229
- s::cl_float4 ExpectedValue =
230
- s::cl_float4 (46 .0f , 47 .0f , 48 .0f , 49 .0f ) / 127 .0f ;
220
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
221
+ s::float4 ExpectedValue = s::float4 (46 .0f , 47 .0f , 48 .0f , 49 .0f ) / 127 .0f ;
231
222
auto Sampler =
232
223
s::sampler (s::coordinate_normalization_mode::normalized,
233
224
s::addressing_mode::repeat, s::filtering_mode::linear);
@@ -236,9 +227,8 @@ void checkSamplerLinear() {
236
227
}
237
228
{
238
229
// In-range repeat mode
239
- s::cl_float4 Coord (0 .0f , 0 .25f , 0 .55f , 0 .0f );
240
- s::cl_float4 ExpectedValue =
241
- s::cl_float4 (44 .8f , 45 .8f , 46 .8f , 47 .8f ) / 127 .0f ;
230
+ s::float4 Coord (0 .0f , 0 .25f , 0 .55f , 0 .0f );
231
+ s::float4 ExpectedValue = s::float4 (44 .8f , 45 .8f , 46 .8f , 47 .8f ) / 127 .0f ;
242
232
auto Sampler =
243
233
s::sampler (s::coordinate_normalization_mode::normalized,
244
234
s::addressing_mode::repeat, s::filtering_mode::linear);
@@ -249,19 +239,17 @@ void checkSamplerLinear() {
249
239
// addressing_mode::clamp_to_edge
250
240
{
251
241
// Out-of-range Edge Color
252
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
253
- s::cl_float4 ExpectedValue =
254
- s::cl_float4 (88 .0f , 89 .0f , 90 .0f , 91 .0f ) / 127 .0f ;
242
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
243
+ s::float4 ExpectedValue = s::float4 (88 .0f , 89 .0f , 90 .0f , 91 .0f ) / 127 .0f ;
255
244
auto Sampler = s::sampler (s::coordinate_normalization_mode::normalized,
256
245
s::addressing_mode::clamp_to_edge,
257
246
s::filtering_mode::linear);
258
247
checkReadSampler<3 >(host_ptr, Sampler, Coord, ExpectedValue,
259
248
PrecisionInULP);
260
249
}
261
250
{
262
- s::cl_float4 Coord (0 .0f , 0 .2f , 0 .5f , 0 .0f ); // In-range
263
- s::cl_float4 ExpectedValue =
264
- s::cl_float4 (36 .8f , 37 .8f , 38 .8f , 39 .8f ) / 127 .0f ;
251
+ s::float4 Coord (0 .0f , 0 .2f , 0 .5f , 0 .0f ); // In-range
252
+ s::float4 ExpectedValue = s::float4 (36 .8f , 37 .8f , 38 .8f , 39 .8f ) / 127 .0f ;
265
253
auto Sampler = s::sampler (s::coordinate_normalization_mode::normalized,
266
254
s::addressing_mode::clamp_to_edge,
267
255
s::filtering_mode::linear);
@@ -272,8 +260,8 @@ void checkSamplerLinear() {
272
260
// addressing_mode::clamp
273
261
{
274
262
// Out-of-range
275
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
276
- s::cl_float4 ExpectedValue = s::cl_float4 (0 .0f , 0 .0f , 0 .0f , 0 .0f );
263
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
264
+ s::float4 ExpectedValue = s::float4 (0 .0f , 0 .0f , 0 .0f , 0 .0f );
277
265
auto Sampler =
278
266
s::sampler (s::coordinate_normalization_mode::normalized,
279
267
s::addressing_mode::clamp, s::filtering_mode::linear);
@@ -282,9 +270,8 @@ void checkSamplerLinear() {
282
270
}
283
271
{
284
272
// In-range
285
- s::cl_float4 Coord (0 .0f , 0 .2f , 0 .5f , 0 .0f );
286
- s::cl_float4 ExpectedValue =
287
- s::cl_float4 (18 .4f , 18 .9f , 19 .4f , 19 .9f ) / 127 .0f ;
273
+ s::float4 Coord (0 .0f , 0 .2f , 0 .5f , 0 .0f );
274
+ s::float4 ExpectedValue = s::float4 (18 .4f , 18 .9f , 19 .4f , 19 .9f ) / 127 .0f ;
288
275
auto Sampler =
289
276
s::sampler (s::coordinate_normalization_mode::normalized,
290
277
s::addressing_mode::clamp, s::filtering_mode::linear);
@@ -295,9 +282,8 @@ void checkSamplerLinear() {
295
282
// addressing_mode::none
296
283
{
297
284
// In-range for consistent return value.
298
- s::cl_float4 Coord (0 .5f , 0 .5f , 0 .5f , 0 .0f );
299
- s::cl_float4 ExpectedValue =
300
- s::cl_float4 (46 .0f , 47 .0f , 48 .0f , 49 .0f ) / 127 .0f ;
285
+ s::float4 Coord (0 .5f , 0 .5f , 0 .5f , 0 .0f );
286
+ s::float4 ExpectedValue = s::float4 (46 .0f , 47 .0f , 48 .0f , 49 .0f ) / 127 .0f ;
301
287
auto Sampler =
302
288
s::sampler (s::coordinate_normalization_mode::normalized,
303
289
s::addressing_mode::none, s::filtering_mode::linear);
@@ -309,9 +295,8 @@ void checkSamplerLinear() {
309
295
// addressing_mode::clamp_to_edge
310
296
{
311
297
// Out-of-range
312
- s::cl_float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
313
- s::cl_float4 ExpectedValue =
314
- s::cl_float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
298
+ s::float4 Coord (0 .0f , 1 .5f , 2 .5f , 0 .0f );
299
+ s::float4 ExpectedValue = s::float4 (56 .0f , 57 .0f , 58 .0f , 59 .0f ) / 127 .0f ;
315
300
auto Sampler = s::sampler (s::coordinate_normalization_mode::unnormalized,
316
301
s::addressing_mode::clamp_to_edge,
317
302
s::filtering_mode::linear);
@@ -320,8 +305,8 @@ void checkSamplerLinear() {
320
305
}
321
306
{
322
307
// In-range
323
- s::cl_float4 Coord (0 .0f , 0 .2f , 0 .5f , 0 .0f );
324
- s::cl_float4 ExpectedValue = s::cl_float4 (0 .0f , 1 .0f , 2 .0f , 3 .0f ) / 127 .0f ;
308
+ s::float4 Coord (0 .0f , 0 .2f , 0 .5f , 0 .0f );
309
+ s::float4 ExpectedValue = s::float4 (0 .0f , 1 .0f , 2 .0f , 3 .0f ) / 127 .0f ;
325
310
auto Sampler = s::sampler (s::coordinate_normalization_mode::unnormalized,
326
311
s::addressing_mode::clamp_to_edge,
327
312
s::filtering_mode::linear);
@@ -332,9 +317,8 @@ void checkSamplerLinear() {
332
317
// addressing_mode::clamp
333
318
{
334
319
// Out-of-range
335
- s::cl_float4 Coord (0 .0f , 1 .5f , 1 .5f , 0 .0f );
336
- s::cl_float4 ExpectedValue =
337
- s::cl_float4 (16 .0f , 16 .5f , 17 .0f , 17 .5f ) / 127 .0f ;
320
+ s::float4 Coord (0 .0f , 1 .5f , 1 .5f , 0 .0f );
321
+ s::float4 ExpectedValue = s::float4 (16 .0f , 16 .5f , 17 .0f , 17 .5f ) / 127 .0f ;
338
322
auto Sampler =
339
323
s::sampler (s::coordinate_normalization_mode::unnormalized,
340
324
s::addressing_mode::clamp, s::filtering_mode::linear);
@@ -343,9 +327,8 @@ void checkSamplerLinear() {
343
327
}
344
328
{
345
329
// In-range
346
- s::cl_float4 Coord (0 .0f , 0 .2f , 0 .5f , 0 .0f );
347
- s::cl_float4 ExpectedValue =
348
- s::cl_float4 (0 .0f , 0 .35f , 0 .7f , 1 .05f ) / 127 .0f ;
330
+ s::float4 Coord (0 .0f , 0 .2f , 0 .5f , 0 .0f );
331
+ s::float4 ExpectedValue = s::float4 (0 .0f , 0 .35f , 0 .7f , 1 .05f ) / 127 .0f ;
349
332
auto Sampler =
350
333
s::sampler (s::coordinate_normalization_mode::unnormalized,
351
334
s::addressing_mode::clamp, s::filtering_mode::linear);
@@ -356,9 +339,8 @@ void checkSamplerLinear() {
356
339
// addressing_mode::none
357
340
{
358
341
// In-range for consistent return value.
359
- s::cl_float4 Coord (1 .0f , 2 .0f , 3 .0f , 0 .0f );
360
- s::cl_float4 ExpectedValue =
361
- s::cl_float4 (74 .0f , 75 .0f , 76 .0f , 77 .0f ) / 127 .0f ;
342
+ s::float4 Coord (1 .0f , 2 .0f , 3 .0f , 0 .0f );
343
+ s::float4 ExpectedValue = s::float4 (74 .0f , 75 .0f , 76 .0f , 77 .0f ) / 127 .0f ;
362
344
auto Sampler =
363
345
s::sampler (s::coordinate_normalization_mode::unnormalized,
364
346
s::addressing_mode::none, s::filtering_mode::linear);
@@ -369,8 +351,8 @@ void checkSamplerLinear() {
369
351
370
352
int main () {
371
353
372
- // Note: Currently these functions only check for cl_float4 return datatype,
373
- // the test case can be extended to test all return datatypes.
354
+ // Note: Currently these functions only check for vec<float, 4> return
355
+ // datatype, the test case can be extended to test all return datatypes.
374
356
checkSamplerNearest ();
375
357
checkSamplerLinear ();
376
358
}
0 commit comments