mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-06 02:18:05 +08:00
Return 0 when Program Scope Global Variables are not supported
clGetDeviceInfo and clGetProgramBuildInfo may return 0 when Program Scope Global Variables are not supported Related-To: NEO-4368 Change-Id: I2c319c53ffa2e02eeb370775023f5d73219cb39e Signed-off-by: Andrzej Swierczynski <andrzej.swierczynski@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
853d870d1c
commit
42810f4690
@@ -303,8 +303,8 @@ void ClDevice::initializeCaps() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
deviceInfo.preemptionSupported = false;
|
deviceInfo.preemptionSupported = false;
|
||||||
deviceInfo.maxGlobalVariableSize = 64 * KB;
|
deviceInfo.maxGlobalVariableSize = enabledClVersion >= 20 ? 64 * KB : 0;
|
||||||
deviceInfo.globalVariablePreferredTotalSize = static_cast<size_t>(sharedDeviceInfo.maxMemAllocSize);
|
deviceInfo.globalVariablePreferredTotalSize = enabledClVersion >= 20 ? static_cast<size_t>(sharedDeviceInfo.maxMemAllocSize) : 0;
|
||||||
|
|
||||||
deviceInfo.planarYuvMaxWidth = 16384;
|
deviceInfo.planarYuvMaxWidth = 16384;
|
||||||
deviceInfo.planarYuvMaxHeight = 16352;
|
deviceInfo.planarYuvMaxHeight = 16352;
|
||||||
|
|||||||
@@ -180,13 +180,16 @@ cl_int Program::processProgramInfo(ProgramInfo &src) {
|
|||||||
this->constantSurface = allocateGlobalsSurface(svmAllocsManager, *pDevice, src.globalConstants.size, true, linkerInput.get(), src.globalConstants.initData);
|
this->constantSurface = allocateGlobalsSurface(svmAllocsManager, *pDevice, src.globalConstants.size, true, linkerInput.get(), src.globalConstants.initData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->globalVarTotalSize = src.globalVariables.size;
|
||||||
|
|
||||||
if (src.globalVariables.size != 0) {
|
if (src.globalVariables.size != 0) {
|
||||||
UNRECOVERABLE_IF(nullptr == pDevice);
|
UNRECOVERABLE_IF(nullptr == pDevice);
|
||||||
this->globalSurface = allocateGlobalsSurface(svmAllocsManager, *pDevice, src.globalVariables.size, false, linkerInput.get(), src.globalVariables.initData);
|
this->globalSurface = allocateGlobalsSurface(svmAllocsManager, *pDevice, src.globalVariables.size, false, linkerInput.get(), src.globalVariables.initData);
|
||||||
|
if (pDevice->getSpecializedDevice<ClDevice>()->getEnabledClVersion() < 20) {
|
||||||
|
this->globalVarTotalSize = 0u;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this->globalVarTotalSize = src.globalVariables.size;
|
|
||||||
|
|
||||||
for (auto &kernelInfo : this->kernelInfoArray) {
|
for (auto &kernelInfo : this->kernelInfoArray) {
|
||||||
cl_int retVal = CL_SUCCESS;
|
cl_int retVal = CL_SUCCESS;
|
||||||
if (kernelInfo->heapInfo.pKernelHeader->KernelHeapSize && this->pDevice) {
|
if (kernelInfo->heapInfo.pKernelHeader->KernelHeapSize && this->pDevice) {
|
||||||
|
|||||||
@@ -478,6 +478,38 @@ TEST(GetDeviceInfo, GivenSimultaneousInteropsWhenGettingDeviceInfoThenCorrectVal
|
|||||||
EXPECT_TRUE(memcmp(value, &device->simultaneousInterops[0], 4u * sizeof(cl_uint)) == 0);
|
EXPECT_TRUE(memcmp(value, &device->simultaneousInterops[0], 4u * sizeof(cl_uint)) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(GetDeviceInfo, GivenMaxGlobalVariableSizeWhenGettingDeviceInfoThenCorrectValueIsReturned) {
|
||||||
|
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));
|
||||||
|
|
||||||
|
size_t value = 0;
|
||||||
|
size_t size = 0;
|
||||||
|
|
||||||
|
auto retVal = device->getDeviceInfo(CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE, sizeof(size_t), &value, &size);
|
||||||
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
|
EXPECT_EQ(sizeof(size_t), size);
|
||||||
|
if (device->getEnabledClVersion() >= 20) {
|
||||||
|
EXPECT_EQ(value, 65536u);
|
||||||
|
} else {
|
||||||
|
EXPECT_EQ(value, 0u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(GetDeviceInfo, GivenGlobalVariablePreferredTotalSizeWhenGettingDeviceInfoThenCorrectValueIsReturned) {
|
||||||
|
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));
|
||||||
|
|
||||||
|
size_t value = 0;
|
||||||
|
size_t size = 0;
|
||||||
|
|
||||||
|
auto retVal = device->getDeviceInfo(CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE, sizeof(size_t), &value, &size);
|
||||||
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
|
EXPECT_EQ(sizeof(size_t), size);
|
||||||
|
if (device->getEnabledClVersion() >= 20) {
|
||||||
|
EXPECT_EQ(value, static_cast<size_t>(device->getSharedDeviceInfo().maxMemAllocSize));
|
||||||
|
} else {
|
||||||
|
EXPECT_EQ(value, 0u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TEST(GetDeviceInfo, GivenPreferredInteropsWhenGettingDeviceInfoThenCorrectValueIsReturned) {
|
TEST(GetDeviceInfo, GivenPreferredInteropsWhenGettingDeviceInfoThenCorrectValueIsReturned) {
|
||||||
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));
|
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));
|
||||||
|
|
||||||
|
|||||||
@@ -108,7 +108,6 @@ class MockProgram : public Program {
|
|||||||
void ClearOptions() { options = ""; }
|
void ClearOptions() { options = ""; }
|
||||||
void SetCreatedFromBinary(bool createdFromBin) { isCreatedFromBinary = createdFromBin; }
|
void SetCreatedFromBinary(bool createdFromBin) { isCreatedFromBinary = createdFromBin; }
|
||||||
void ClearLog() { buildLog.clear(); }
|
void ClearLog() { buildLog.clear(); }
|
||||||
void SetGlobalVariableTotalSize(size_t globalVarSize) { globalVarTotalSize = globalVarSize; }
|
|
||||||
void SetDevice(Device *pDev) { pDevice = pDev; }
|
void SetDevice(Device *pDev) { pDevice = pDev; }
|
||||||
|
|
||||||
void SetIrBinary(char *ptr, bool isSpirv) {
|
void SetIrBinary(char *ptr, bool isSpirv) {
|
||||||
|
|||||||
@@ -550,6 +550,7 @@ TEST_P(ProgramFromBinaryTest, GivenGlobalVariableTotalSizeSetWhenGettingBuildGlo
|
|||||||
paramValueSize,
|
paramValueSize,
|
||||||
paramValue,
|
paramValue,
|
||||||
¶mValueSizeRet);
|
¶mValueSizeRet);
|
||||||
|
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
EXPECT_EQ(paramValueSizeRet, sizeof(globalVarSize));
|
EXPECT_EQ(paramValueSizeRet, sizeof(globalVarSize));
|
||||||
EXPECT_EQ(globalVarSize, 0u);
|
EXPECT_EQ(globalVarSize, 0u);
|
||||||
@@ -557,7 +558,12 @@ TEST_P(ProgramFromBinaryTest, GivenGlobalVariableTotalSizeSetWhenGettingBuildGlo
|
|||||||
// Set GlobalVariableTotalSize as 1024
|
// Set GlobalVariableTotalSize as 1024
|
||||||
CreateProgramFromBinary(pContext, &device, BinaryFileName);
|
CreateProgramFromBinary(pContext, &device, BinaryFileName);
|
||||||
MockProgram *p = pProgram;
|
MockProgram *p = pProgram;
|
||||||
p->SetGlobalVariableTotalSize(1024u);
|
ProgramInfo programInfo;
|
||||||
|
|
||||||
|
char constantData[1024] = {};
|
||||||
|
programInfo.globalVariables.initData = constantData;
|
||||||
|
programInfo.globalVariables.size = sizeof(constantData);
|
||||||
|
p->processProgramInfo(programInfo);
|
||||||
|
|
||||||
// get build info once again
|
// get build info once again
|
||||||
retVal = pProgram->getBuildInfo(
|
retVal = pProgram->getBuildInfo(
|
||||||
@@ -568,7 +574,11 @@ TEST_P(ProgramFromBinaryTest, GivenGlobalVariableTotalSizeSetWhenGettingBuildGlo
|
|||||||
¶mValueSizeRet);
|
¶mValueSizeRet);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
EXPECT_EQ(paramValueSizeRet, sizeof(globalVarSize));
|
EXPECT_EQ(paramValueSizeRet, sizeof(globalVarSize));
|
||||||
EXPECT_EQ(globalVarSize, 1024u);
|
if (castToObject<ClDevice>(pClDevice)->getEnabledClVersion() >= 20) {
|
||||||
|
EXPECT_EQ(globalVarSize, 1024u);
|
||||||
|
} else {
|
||||||
|
EXPECT_EQ(globalVarSize, 0u);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_P(ProgramFromBinaryTest, givenProgramWhenItIsBeingBuildThenItContainsGraphicsAllocationInKernelInfo) {
|
TEST_P(ProgramFromBinaryTest, givenProgramWhenItIsBeingBuildThenItContainsGraphicsAllocationInKernelInfo) {
|
||||||
|
|||||||
Reference in New Issue
Block a user