DPCT1112
目次
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 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 ...