DPCT1074#

Message#

The SYCL Image class does not support some of the flags used in the original code. Unsupported flags were ignored. Data read from SYCL Image could not be normalized as specified in the original code.

Detailed Help#

Data read from tex in original code is normalized to a float in the range of (0, 1] by default, unless CU_TRSF_READ_AS_INTEGER is set. While data read from SYCL* image cannot be normalized to a float in the range of (0, 1] using the standard SYCL API. All flags used in the original code are ignored, except coordinate normalization mode.

Suggestions to Fix#

Adjust the code manually.

For example, this original CUDA* code:

1  // User does not set CU_TRSF_READ_AS_INTEGER here.
2  cuTexRefSetFlags(tex, CU_TRSF_NORMALIZED_COORDINATES);
3  cuTexRefSetFormat(tex, CU_AD_FORMAT_UNSIGNED_INT16, 1);
4  ...
5  result = tex2D<float>(tex, 0.5f, 0.5f);

results in the following migrated SYCL code:

 1  /*
 2  DPCT1074:0: The SYCL Image class does not support some of the flags used in
 3  the original code. Unsupported flags were ignored. Data read from SYCL Image
 4  could not be normalized as specified in the original code.
 5  */
 6  tex->set(sycl::coordinate_normalization_mode::normalized);
 7  tex->set_channel_type(sycl::image_channel_type::unsigned_int16);
 8  tex->set_channel_num(1);
 9  ...
10  result = tex.read(0.5f, 0.5f); // data normalization does not match original code

which is manually adjusted to:

1  tex->set(sycl::coordinate_normalization_mode::normalized);
2  tex->set_channel_type(sycl::image_channel_type::unsigned_int16);
3  tex->set_channel_num(1);
4  ...
5  result = tex.read(0.5f, 0.5f) / float(std::numeric_limits<std::uint16_t>::max());