ankabackprojectburst.in 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. read_only image2d_t projection_{},
  2. %nl
  3. pixel.x = mad(voxel.x, cosines{1}, mad(voxel.y, sines{1}, center.x));
  4. pixel.y = mad(tmp_x, sines{1}, mad(tmp_y, cosines{1}, tmp));
  5. result {2}= read_imagef (projection_{0}, sampler, pixel).x;
  6. %nl
  7. kernel void backproject_burst_{0} (
  8. {1}
  9. global float *volume,
  10. const sampler_t sampler,
  11. const int3 real_size,
  12. const float2 center,
  13. const float2 x_region,
  14. const float2 y_region,
  15. const float2 z_region,
  16. const float sin_lamino,
  17. const float cos_lamino,
  18. const float{2} sines,
  19. const float{2} cosines,
  20. const int cumulate)
  21. {{
  22. int idx = get_global_id (0);
  23. int idy = get_global_id (1);
  24. int idz = get_global_id (2);
  25. float result, tmp, tmp_x, tmp_y;
  26. float2 pixel;
  27. float3 voxel;
  28. if (idx < real_size.x && idy < real_size.y && idz < real_size.z) {{
  29. voxel.x = mad((float) idx, x_region.y, x_region.x);
  30. voxel.y = mad((float) idy, y_region.y, y_region.x);
  31. voxel.z = mad((float) idz, z_region.y, z_region.x);
  32. tmp = mad(voxel.z, sin_lamino, center.y);
  33. tmp_x = voxel.x * cos_lamino;
  34. tmp_y = -voxel.y * cos_lamino;
  35. {3}
  36. if (cumulate) {{
  37. volume[idz * real_size.x * real_size.y + idy * real_size.x + idx] += result;
  38. }} else {{
  39. volume[idz * real_size.x * real_size.y + idy * real_size.x + idx] = result;
  40. }}
  41. }}
  42. }}