Fix handling null resource from gtpin

Change-Id: I2e6a0992f9c0d672cb42724f2bb1a698b3ba2861
This commit is contained in:
mplewka
2018-07-18 10:56:11 +02:00
committed by sys_ocldev
parent 366a12e3ce
commit 1afc09bc05
2 changed files with 31 additions and 10 deletions

View File

@ -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);