Start the lifetime of the texture reference

reinterpret_cast<> doesn't create an object, so the texref is actually unitiliazed. This may lead to garbage data in some of its struct members.

Initialize it by performing a placement new. The constructer should set all of its members to default values. There's no way currently to extract the channel type, so use single channel char for now.

Change-Id: I41b305a75bb3f30130324de785099f55b3e130c7


[ROCm/clr commit: b4a0008b36]
This commit is contained in:
Vladislav Sytchenko
2020-03-18 12:23:11 -04:00
rodzic ebd1dec272
commit 84ba26979a
2 zmienionych plików z 6 dodań i 1 usunięć
@@ -528,6 +528,10 @@ hipError_t hipModuleGetTexRef(textureReference** texRef, hipModule_t hmod, const
HIP_RETURN(hipErrorNotFound);
}
// Texture references created by HIP driver API
// have the default read mode set to normalized float.
(*texRef)->readMode = hipReadModeNormalizedFloat;
HIP_RETURN(hipSuccess);
}
@@ -361,7 +361,8 @@ bool PlatformState::getTexRef(const char* hostVar, hipModule_t hmod, textureRefe
return false;
}
*texRef = reinterpret_cast<textureReference *>(dvar->shadowVptr);
*texRef = new (dvar->shadowVptr) texture<char>{};
return true;
}