DPCT1112#

メッセージ#

フィルターモードが linear に設定されていると、イメージの “リード” 動作は、元のコードの tex1Dfetch とは異なる可能性があります。ソースコードの調整が必要な場合があります。

詳細な説明#

CUDA* tex1Dfetch 関数は、最も近いフィルターモードを適用します。移行後のコードでは、イメージの読み取り関数はテクスチャー・オブジェクトに設定されるフィルターモードを適用します。読み取り後のイメージは異なる結果になる可能性があるため、イメージの読み取りでフィルターモードを調整することが必要な場合があります。

修正方法の提案#

例えば、以下のオリジナル CUDA* コードについて考えてみます。

1   cudaTextureDesc desc; 
2   desc.filterMode = cudaFilterModeLinear; 
3     ...
4   cudaTextureObject_t obj; 
5   cudaCreateTextureObject(&obj, ..., &desc, ...); 
6      ... 
7   tex1Dfetch(..., obj, ...);

このコードは、以下の SYCL* コードに移行されます。

1   dpct::sampling_info desc; 
2   desc.set(sycl::filtering_mode::linear); 
3      ... 
4   dpct::image_wrapper_base_p obj; 
5   obj = dpct::create_image_wrapper(..., desc); 
6      ... 
7   /* 
8   DPCT1112:0: If the filter mode is set to 'linear', the behavior of image 
9   "read" may be different from "tex1Dfetch" in the original code.You may need 
10  to adjust the code.
11  */ 
12  obj.read(...);

このコードは次のように書き換えられます。

1   dpct::sampling_info desc; 
2   desc.set(sycl::filtering_mode::nearest); // Update the filtering mode from linear to nearest 
3      ... 
4   dpct::image_wrapper_base_p obj; 
5   obj = dpct::create_image_wrapper(..., desc); 
6      ...