weightp.cl 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /* Weightp filter a downscaled image into a temporary output buffer.
  2. * This kernel is launched once for each scale.
  3. *
  4. * Launch dimensions: width x height (in pixels)
  5. */
  6. kernel void weightp_scaled_images( read_only image2d_t in_plane,
  7. write_only image2d_t out_plane,
  8. uint offset,
  9. uint scale,
  10. uint denom )
  11. {
  12. int gx = get_global_id( 0 );
  13. int gy = get_global_id( 1 );
  14. uint4 input_val;
  15. uint4 output_val;
  16. input_val = read_imageui( in_plane, sampler, (int2)(gx, gy));
  17. output_val = (uint4)(offset) + ( ( ((uint4)(scale)) * input_val ) >> ((uint4)(denom)) );
  18. write_imageui( out_plane, (int2)(gx, gy), output_val );
  19. }
  20. /* Weightp filter for the half-pel interpolated image
  21. *
  22. * Launch dimensions: width x height (in pixels)
  23. */
  24. kernel void weightp_hpel( read_only image2d_t in_plane,
  25. write_only image2d_t out_plane,
  26. uint offset,
  27. uint scale,
  28. uint denom )
  29. {
  30. int gx = get_global_id( 0 );
  31. int gy = get_global_id( 1 );
  32. uint input_val;
  33. uint output_val;
  34. input_val = read_imageui( in_plane, sampler, (int2)(gx, gy)).s0;
  35. //Unpack
  36. uint4 temp;
  37. temp.s0 = input_val & 0x00ff; temp.s1 = (input_val >> 8) & 0x00ff;
  38. temp.s2 = (input_val >> 16) & 0x00ff; temp.s3 = (input_val >> 24) & 0x00ff;
  39. temp = (uint4)(offset) + ( ( ((uint4)(scale)) * temp ) >> ((uint4)(denom)) );
  40. //Pack
  41. output_val = temp.s0 | (temp.s1 << 8) | (temp.s2 << 16) | (temp.s3 << 24);
  42. write_imageui( out_plane, (int2)(gx, gy), output_val );
  43. }