ankabackprojectburst.in 1.7 KB

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