diff --git a/hipamd/vdi/hip_module.cpp b/hipamd/vdi/hip_module.cpp index f1d3ba38ba..66955fcf3d 100755 --- a/hipamd/vdi/hip_module.cpp +++ b/hipamd/vdi/hip_module.cpp @@ -118,7 +118,7 @@ hipError_t hipModuleLoadDataEx(hipModule_t *module, const void *image, HIP_RETURN(ihipModuleLoadData(module, image)); } -extern bool __hipExtractCodeObjectFromFatBinary(const void* data, +extern hipError_t __hipExtractCodeObjectFromFatBinary(const void* data, const std::vector& devices, std::vector>& code_objs); @@ -180,8 +180,12 @@ bool ihipModuleRegisterGlobal(amd::Program* program, hipModule_t* module) { hipError_t ihipModuleLoadData(hipModule_t *module, const void *image) { std::vector> code_objs; - if (__hipExtractCodeObjectFromFatBinary(image, {hip::getCurrentDevice()->devices()[0]->info().name_}, code_objs)) + hipError_t code_obj_err = __hipExtractCodeObjectFromFatBinary(image, {hip::getCurrentDevice()->devices()[0]->info().name_}, code_objs); + if (code_obj_err == hipSuccess) { image = code_objs[0].first; + } else if(code_obj_err == hipErrorNoBinaryForGpu) { + return code_obj_err; + } amd::Program* program = new amd::Program(*hip::getCurrentDevice()->asContext()); if (program == NULL) { diff --git a/hipamd/vdi/hip_platform.cpp b/hipamd/vdi/hip_platform.cpp index a59063fe4c..9618719e47 100755 --- a/hipamd/vdi/hip_platform.cpp +++ b/hipamd/vdi/hip_platform.cpp @@ -79,13 +79,13 @@ static bool isCompatibleCodeObject(const std::string& codeobj_target_id, // Extracts code objects from fat binary in data for device names given in devices. // Returns true if code objects are extracted successfully. -bool __hipExtractCodeObjectFromFatBinary(const void* data, +hipError_t __hipExtractCodeObjectFromFatBinary(const void* data, const std::vector& devices, std::vector>& code_objs) { std::string magic((const char*)data, sizeof(CLANG_OFFLOAD_BUNDLER_MAGIC_STR) - 1); if (magic.compare(CLANG_OFFLOAD_BUNDLER_MAGIC_STR)) { - return false; + return hipErrorInvalidKernelFile; } code_objs.resize(devices.size()); @@ -123,9 +123,9 @@ bool __hipExtractCodeObjectFromFatBinary(const void* data, } } if (num_code_objs == devices.size()) - return true; + return hipSuccess; else - return false; + return hipErrorNoBinaryForGpu; } extern "C" std::vector>* __hipRegisterFatBinary(const void* data) @@ -150,7 +150,7 @@ void PlatformState::digestFatBinary(const void* data, std::vectordevices()[0]->info().name_); } - if (!__hipExtractCodeObjectFromFatBinary((char*)data, devices, code_objs)) { + if (hipSuccess != __hipExtractCodeObjectFromFatBinary((char*)data, devices, code_objs)) { return; }