Add basic Exa driver entry point validation.

In exaDriverInit(), quickly check if the programmer forgot to set some
mandadory driver hooks, in that case display a meaningful error message.
This commit is contained in:
Dodji Seketeli 2007-07-16 17:37:21 +02:00 committed by Dodji Seketeli
parent e5e6514ffa
commit 95fadbd402

View File

@ -722,6 +722,48 @@ exaDriverAlloc(void)
return xcalloc(1, sizeof(ExaDriverRec));
}
static Bool
exaDriverValidateEntryPoints (ExaDriverPtr pExaDriver)
{
Bool res=TRUE ;
if (!pExaDriver)
return FALSE ;
if (!pExaDriver->memoryBase) {
LogMessage(X_ERROR,
"Exa: Exa::memoryBase member "
"must be assigned to a value different from zero\n") ;
res = FALSE ;
}
if (!pExaDriver->memorySize) {
LogMessage(X_ERROR,
"Exa: Exa::memorySize member must be different from zero\n") ;
res = FALSE ;
}
if (pExaDriver->offScreenBase > pExaDriver->memorySize) {
LogMessage(X_ERROR,
"Exa: Exa::ffscreenBase must be <= pExaDriver->memorySize member\n") ;
res = FALSE ;
}
if (!pExaDriver->PrepareSolid) {
LogMessage(X_ERROR,
"Exa: Exa::PrepareSolid member is required to be non NULL\n") ;
res = FALSE ;
}
if (!pExaDriver->PrepareCopy) {
LogMessage(X_ERROR,
"Exa: Exa::PrepareCopy member is required to be non NULL\n") ;
res = FALSE ;
}
if (!pExaDriver->WaitMarker) {
LogMessage(X_ERROR,
"Exa: Exa::WaitWarker member is required to be non NULL\n") ;
res = FALSE ;
}
return res ;
}
/**
* @param pScreen screen being initialized
* @param pScreenInfo EXA driver record
@ -806,6 +848,12 @@ exaDriverInit (ScreenPtr pScreen,
{
pScreenInfo->maxPitchPixels = pScreenInfo->maxX;
}
if (!exaDriverValidateEntryPoints(pScreenInfo))
{
LogMessage(X_ERROR, "Exa(%d): EXA driver entry points validation failed\n",
pScreen->myNum) ;
return FALSE ;
}
#ifdef RENDER
ps = GetPictureScreenIfSet(pScreen);