mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-10 12:53:42 +08:00
Fix handling null resource from gtpin
Change-Id: I2e6a0992f9c0d672cb42724f2bb1a698b3ba2861
This commit is contained in:
@ -202,13 +202,10 @@ void gtpinNotifyMakeResident(void *pKernel, void *pCSR) {
|
||||
lock.enter(kernelExecQueueLock);
|
||||
size_t numElems = kernelExecQueue.size();
|
||||
for (size_t n = 0; n < numElems; n++) {
|
||||
if ((kernelExecQueue[n].pKernel == pKernel) && !kernelExecQueue[n].isResourceResident) {
|
||||
if ((kernelExecQueue[n].pKernel == pKernel) && !kernelExecQueue[n].isResourceResident && kernelExecQueue[n].gtpinResource) {
|
||||
// It's time for kernel to make resident its GT-Pin resource
|
||||
CommandStreamReceiver *pCommandStreamReceiver = reinterpret_cast<CommandStreamReceiver *>(pCSR);
|
||||
cl_mem gtpinBuffer = kernelExecQueue[n].gtpinResource;
|
||||
if (!gtpinBuffer) {
|
||||
break;
|
||||
}
|
||||
auto pBuffer = castToObjectOrAbort<Buffer>(gtpinBuffer);
|
||||
GraphicsAllocation *pGfxAlloc = pBuffer->getGraphicsAllocation();
|
||||
pCommandStreamReceiver->makeResident(*pGfxAlloc);
|
||||
@ -226,13 +223,10 @@ void gtpinNotifyUpdateResidencyList(void *pKernel, void *pResVec) {
|
||||
lock.enter(kernelExecQueueLock);
|
||||
size_t numElems = kernelExecQueue.size();
|
||||
for (size_t n = 0; n < numElems; n++) {
|
||||
if ((kernelExecQueue[n].pKernel == pKernel) && !kernelExecQueue[n].isResourceResident) {
|
||||
if ((kernelExecQueue[n].pKernel == pKernel) && !kernelExecQueue[n].isResourceResident && kernelExecQueue[n].gtpinResource) {
|
||||
// It's time for kernel to update its residency list with its GT-Pin resource
|
||||
std::vector<Surface *> *pResidencyVector = (std::vector<Surface *> *)pResVec;
|
||||
cl_mem gtpinBuffer = kernelExecQueue[n].gtpinResource;
|
||||
if (!gtpinBuffer) {
|
||||
break;
|
||||
}
|
||||
auto pBuffer = castToObjectOrAbort<Buffer>(gtpinBuffer);
|
||||
GraphicsAllocation *pGfxAlloc = pBuffer->getGraphicsAllocation();
|
||||
GeneralSurface *pSurface = new GeneralSurface(pGfxAlloc);
|
||||
|
@ -1414,7 +1414,7 @@ TEST_F(GTPinTests, givenInitializedGTPinInterfaceWhenTheSameKerneIsExecutedTwice
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
}
|
||||
|
||||
TEST_F(GTPinTests, givenInitializedGTPinInterfaceWhenNullResourceReturnedFromOnKernelSubmitThenResourceNotSetAndNotBecomingResident) {
|
||||
TEST_F(GTPinTests, givenMultipleKernelSubmissionsWhenOneOfGtpinSurfacesIsNullThenOnlyNonNullSurfacesAreMadeResident) {
|
||||
gtpinCallbacks.onContextCreate = OnContextCreate;
|
||||
gtpinCallbacks.onContextDestroy = OnContextDestroy;
|
||||
gtpinCallbacks.onKernelCreate = OnKernelCreate;
|
||||
@ -1476,7 +1476,7 @@ TEST_F(GTPinTests, givenInitializedGTPinInterfaceWhenNullResourceReturnedFromOnK
|
||||
auto pCmdQueue = castToObject<CommandQueue>(cmdQ);
|
||||
|
||||
gtpinNotifyKernelSubmit(pKernel1, pCmdQueue);
|
||||
EXPECT_EQ(nullptr, (resource_handle_t)kernelExecQueue[0].gtpinResource);
|
||||
EXPECT_EQ(nullptr, kernelExecQueue[0].gtpinResource);
|
||||
|
||||
CommandStreamReceiver &csr = pCmdQueue->getDevice().getCommandStreamReceiver();
|
||||
gtpinNotifyMakeResident(pKernel1, &csr);
|
||||
@ -1486,6 +1486,33 @@ TEST_F(GTPinTests, givenInitializedGTPinInterfaceWhenNullResourceReturnedFromOnK
|
||||
gtpinNotifyUpdateResidencyList(pKernel1, &residencyVector);
|
||||
EXPECT_EQ(0u, residencyVector.size());
|
||||
|
||||
returnNullResource = false;
|
||||
|
||||
gtpinNotifyKernelSubmit(pKernel1, pCmdQueue);
|
||||
EXPECT_NE(nullptr, kernelExecQueue[1].gtpinResource);
|
||||
gtpinNotifyMakeResident(pKernel1, &csr);
|
||||
EXPECT_TRUE(kernelExecQueue[1].isResourceResident);
|
||||
cl_mem gtpinBuffer1 = kernelExecQueue[1].gtpinResource;
|
||||
|
||||
gtpinNotifyKernelSubmit(pKernel1, pCmdQueue);
|
||||
EXPECT_NE(nullptr, kernelExecQueue[2].gtpinResource);
|
||||
gtpinNotifyUpdateResidencyList(pKernel1, &residencyVector);
|
||||
EXPECT_EQ(1u, residencyVector.size());
|
||||
EXPECT_TRUE(kernelExecQueue[2].isResourceResident);
|
||||
EXPECT_FALSE(kernelExecQueue[0].isResourceResident);
|
||||
|
||||
GeneralSurface *pSurf = static_cast<GeneralSurface *>(residencyVector[0]);
|
||||
delete pSurf;
|
||||
residencyVector.clear();
|
||||
|
||||
cl_mem gtpinBuffer2 = kernelExecQueue[2].gtpinResource;
|
||||
|
||||
gtpinUnmapBuffer(reinterpret_cast<context_handle_t>(context), reinterpret_cast<resource_handle_t>(gtpinBuffer1));
|
||||
gtpinFreeBuffer(reinterpret_cast<context_handle_t>(context), reinterpret_cast<resource_handle_t>(gtpinBuffer1));
|
||||
|
||||
gtpinUnmapBuffer(reinterpret_cast<context_handle_t>(context), reinterpret_cast<resource_handle_t>(gtpinBuffer2));
|
||||
gtpinFreeBuffer(reinterpret_cast<context_handle_t>(context), reinterpret_cast<resource_handle_t>(gtpinBuffer2));
|
||||
|
||||
retVal = clFinish(cmdQ);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
|
||||
|
Reference in New Issue
Block a user