diff --git a/sycl/source/detail/device_binary_image.cpp b/sycl/source/detail/device_binary_image.cpp index e1481a317623b..bbbcb7b5664c3 100644 --- a/sycl/source/detail/device_binary_image.cpp +++ b/sycl/source/detail/device_binary_image.cpp @@ -21,7 +21,6 @@ DynRTDeviceBinaryImage::DynRTDeviceBinaryImage( Bin = new pi_device_binary_struct(); Bin->Version = PI_DEVICE_BINARY_VERSION; Bin->Kind = PI_DEVICE_BINARY_OFFLOAD_KIND_SYCL; - Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_UNKNOWN; Bin->CompileOptions = ""; Bin->LinkOptions = ""; Bin->ManifestStart = nullptr; @@ -31,6 +30,13 @@ DynRTDeviceBinaryImage::DynRTDeviceBinaryImage( Bin->EntriesBegin = nullptr; Bin->EntriesEnd = nullptr; Bin->Format = pi::getBinaryImageFormat(Bin->BinaryStart, DataSize); + switch (Bin->Format) { + case PI_DEVICE_BINARY_TYPE_SPIRV: + Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_SPIRV64; + break; + default: + Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_UNKNOWN; + } init(Bin); } diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index a802a255d25d2..c29ae43615e40 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -637,9 +637,13 @@ ProgramManager::ProgramManager() { RTDeviceBinaryImage &ProgramManager::getDeviceImage(OSModuleHandle M, KernelSetId KSId, const context &Context) { - if (DbgProgMgr > 0) + if (DbgProgMgr > 0) { std::cerr << ">>> ProgramManager::getDeviceImage(" << M << ", \"" << KSId << "\", " << getRawSyclObjImpl(Context) << ")\n"; + + std::cerr << "available device images:\n"; + debugPrintBinaryImages(); + } std::lock_guard Guard(Sync::getGlobalLock()); std::vector &Imgs = *m_DeviceImages[KSId]; const ContextImplPtr Ctx = getSyclObjImpl(Context); @@ -652,19 +656,15 @@ RTDeviceBinaryImage &ProgramManager::getDeviceImage(OSModuleHandle M, // Ask the native runtime under the given context to choose the device image // it prefers. - if (Imgs.size() > 1) { - std::vector RawImgs(Imgs.size()); - for (unsigned I = 0; I < Imgs.size(); I++) - RawImgs[I] = const_cast(&Imgs[I]->getRawData()); + std::vector RawImgs(Imgs.size()); + for (unsigned I = 0; I < Imgs.size(); I++) + RawImgs[I] = const_cast(&Imgs[I]->getRawData()); - Ctx->getPlugin().call( - getFirstDevice(Ctx), RawImgs.data(), (cl_uint)RawImgs.size(), &ImgInd); - } + Ctx->getPlugin().call( + getFirstDevice(Ctx), RawImgs.data(), (cl_uint)RawImgs.size(), &ImgInd); Img = Imgs[ImgInd].get(); if (DbgProgMgr > 0) { - std::cerr << "available device images:\n"; - debugPrintBinaryImages(); std::cerr << "selected device image: " << &Img->getRawData() << "\n"; Img->print(); }