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));
|
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 pScreen screen being initialized
|
||||||
* @param pScreenInfo EXA driver record
|
* @param pScreenInfo EXA driver record
|
||||||
|
@ -806,6 +848,12 @@ exaDriverInit (ScreenPtr pScreen,
|
||||||
{
|
{
|
||||||
pScreenInfo->maxPitchPixels = pScreenInfo->maxX;
|
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
|
#ifdef RENDER
|
||||||
ps = GetPictureScreenIfSet(pScreen);
|
ps = GetPictureScreenIfSet(pScreen);
|
||||||
|
|
Loading…
Reference in New Issue