View difference between Paste ID: m2cfbddc9 and
SHOW:
|
|
- or go back to the newest paste.
1 | __kernel void LinearMetricAddition(__read_only image3d_t target,__read_only image3d_t source, | |
2 | __global int* _bins, | |
3 | sampler_t volumeSampler, | |
4 | __global float* matrix, | |
5 | ) | |
6 | { | |
7 | int i = get_global_id(0); // multiple of 64 | |
8 | int j = get_global_id(1); // multiple of 64 | |
9 | int z = get_global_id(2); // multiple of 64 | |
10 | ||
11 | int4 coords = (int4)(i,j,z,1); | |
12 | ||
13 | // Perform the matrix transformation on the current pixel | |
14 | float _x = matrix[0+0] * i + matrix[0+1] * j + matrix[0+2] * z + matrix[0+3]; | |
15 | float _y = matrix[4+0] * i + matrix[4+1] * j + matrix[4+2] * z + matrix[4+3]; | |
16 | float _z = matrix[8+0] * i + matrix[8+1] * j + matrix[8+2] * z + matrix[8+3]; | |
17 | ||
18 | float4 transCoords = (float4)(_x,_y,_z,1.0f); | |
19 | int res = read_imagei(source,volumeSampler,transCoords).x; | |
20 | ||
21 | //Block size is 64,1,1 ensuring that all operations to _bins will be coalesced | |
22 | _bins[i + j*64 + z*64*64] = read_imagei(target,volumeSampler,coords).x; | |
23 | } | |
24 |