Correct clCreateProgramWithBinary

store proper devices
validate input devices, lengths and binary
return correct binaries

Related-To: NEO-5001
Change-Id: I3822c291a4430e64afe54f1486b0014f16de3d64
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2020-10-21 10:25:03 +02:00
committed by sys_ocldev
parent 4c2d92890f
commit 8afdb2d981
18 changed files with 383 additions and 105 deletions

View File

@@ -43,8 +43,8 @@ struct HelloWorldKernelFixture : public ProgramFixture {
pTestFilename->append(std::to_string(simd));
}
cl_device_id device = pDevice;
pContext = Context::create<MockContext>(nullptr, ClDeviceVector(&device, 1), nullptr, nullptr, retVal);
auto deviceVector = toClDeviceVector(*pDevice);
pContext = Context::create<MockContext>(nullptr, deviceVector, nullptr, nullptr, retVal);
ASSERT_EQ(CL_SUCCESS, retVal);
ASSERT_NE(nullptr, pContext);
@@ -56,18 +56,20 @@ struct HelloWorldKernelFixture : public ProgramFixture {
CreateProgramFromBinary(
pContext,
&device,
deviceVector,
*pTestFilename,
optionsToProgram);
} else {
CreateProgramFromBinary(
pContext,
&device,
deviceVector,
*pTestFilename);
}
ASSERT_NE(nullptr, pProgram);
cl_device_id device = pDevice;
retVal = pProgram->build(
1,
&device,

View File

@@ -41,8 +41,8 @@ void ProgramFixture::CreateProgramWithSource(cl_context context,
ASSERT_EQ(CL_SUCCESS, retVal);
}
void ProgramFixture::CreateProgramFromBinary(cl_context context,
cl_device_id *pDeviceList,
void ProgramFixture::CreateProgramFromBinary(Context *pContext,
const ClDeviceVector &deviceVector,
const std::string &binaryFileName,
cl_int &retVal,
const std::string &options) {
@@ -59,24 +59,23 @@ void ProgramFixture::CreateProgramFromBinary(cl_context context,
ASSERT_NE(nullptr, knownSource);
pProgram = Program::create<MockProgram>(
context,
1,
pDeviceList,
pContext,
deviceVector,
&knownSourceSize,
(const unsigned char **)&knownSource,
nullptr,
retVal);
}
void ProgramFixture::CreateProgramFromBinary(cl_context pContext,
cl_device_id *pDeviceList,
void ProgramFixture::CreateProgramFromBinary(Context *pContext,
const ClDeviceVector &deviceVector,
const std::string &binaryFileName,
const std::string &options) {
Cleanup();
cl_int retVal = CL_SUCCESS;
CreateProgramFromBinary(
pContext,
pDeviceList,
deviceVector,
binaryFileName,
retVal,
options);

View File

@@ -18,14 +18,14 @@ namespace NEO {
class ProgramFixture {
public:
void CreateProgramFromBinary(cl_context context,
cl_device_id *pDeviceList,
void CreateProgramFromBinary(Context *pContext,
const ClDeviceVector &deviceVector,
const std::string &binaryFileName,
cl_int &retVal,
const std::string &options = "");
void CreateProgramFromBinary(cl_context pContext,
cl_device_id *pDeviceList,
void CreateProgramFromBinary(Context *pContext,
const ClDeviceVector &deviceVector,
const std::string &binaryFileName,
const std::string &options = "");

View File

@@ -91,13 +91,14 @@ class SimpleArgKernelFixture : public ProgramFixture {
}
cl_device_id device = pDevice;
pContext = Context::create<MockContext>(nullptr, ClDeviceVector(&device, 1), nullptr, nullptr, retVal);
auto deviceVector = toClDeviceVector(*pDevice);
pContext = Context::create<MockContext>(nullptr, deviceVector, nullptr, nullptr, retVal);
ASSERT_EQ(CL_SUCCESS, retVal);
ASSERT_NE(nullptr, pContext);
CreateProgramFromBinary(
pContext,
&device,
deviceVector,
testFile);
ASSERT_NE(nullptr, pProgram);
@@ -145,11 +146,10 @@ class SimpleArgNonUniformKernelFixture : public ProgramFixture {
ProgramFixture::SetUp();
cl_device_id deviceId = device;
cl_context clContext = context;
CreateProgramFromBinary(
clContext,
&deviceId,
context,
context->getDevices(),
"simple_nonuniform",
"-cl-std=CL2.0");
ASSERT_NE(nullptr, pProgram);
@@ -193,11 +193,10 @@ class SimpleKernelFixture : public ProgramFixture {
ProgramFixture::SetUp();
cl_device_id deviceId = device;
cl_context clContext = context;
std::string programName("simple_kernels");
CreateProgramFromBinary(
clContext,
&deviceId,
context,
toClDeviceVector(*device),
programName);
ASSERT_NE(nullptr, pProgram);
@@ -249,13 +248,12 @@ class SimpleKernelStatelessFixture : public ProgramFixture {
void SetUp(ClDevice *device, Context *context) {
ProgramFixture::SetUp();
cl_device_id deviceId = device;
cl_context clContext = context;
DebugManager.flags.DisableStatelessToStatefulOptimization.set(true);
DebugManager.flags.EnableStatelessToStatefulBufferOffsetOpt.set(false);
CreateProgramFromBinary(
clContext,
&deviceId,
context,
toClDeviceVector(*device),
"stateless_kernel");
ASSERT_NE(nullptr, pProgram);
@@ -300,10 +298,9 @@ class BindlessKernelFixture : public ProgramFixture {
void createKernel(const std::string &programName, const std::string &kernelName) {
DebugManager.flags.UseBindlessMode.set(1);
cl_device_id deviceId = deviceCl;
cl_context clContext = contextCl;
CreateProgramFromBinary(
clContext,
&deviceId,
contextCl,
contextCl->getDevices(),
programName);
ASSERT_NE(nullptr, pProgram);