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:
parent
e5e6514ffa
commit
95fadbd402
48
exa/exa.c
48
exa/exa.c
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue