📄 control.cpp
字号:
sDevData.psDevInfoKM = (PPVRSRV_DEV_INFO)pvIn;
psRet->eError = PVRSRVDestroyParameterBuffer(&sDevData);
break;
}
case PVRSRV_BRIDGE_ADD_RENDERTARGET :
{
PVRSRV_BRIDGE_IN_ADDRENDERTARGET *psBridgeIn;
PVRSRV_DEV_DATA sDevData;
psBridgeIn = (PVRSRV_BRIDGE_IN_ADDRENDERTARGET*)pvIn;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
sDevData.psDevInfoKM = psBridgeIn->psDevInfo;
psRet->eError = PVRSRVAddRenderTarget(&sDevData,
psBridgeIn->ui32Width,
psBridgeIn->ui32Height,
psBridgeIn->ui32AAFlags,
(PVRSRV_TARENDERINFO **)&psRet->pvData);
break;
}
case PVRSRV_BRIDGE_REMOVE_RENDERTARGET :
{
PVRSRV_BRIDGE_IN_REMOVERENDERTARGET *psBridgeIn;
PVRSRV_DEV_DATA sDevData;
psBridgeIn = (PVRSRV_BRIDGE_IN_REMOVERENDERTARGET*)pvIn;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
sDevData.psDevInfoKM = psBridgeIn->psDevInfo;
psRet->eError = PVRSRVRemoveRenderTarget(&sDevData, psBridgeIn->psTARenderInfo);
break;
}
case PVRSRV_BRIDGE_CREATE_COMMANDQUEUE :
{
PVRSRV_BRIDGE_IN_CREATECOMMANDQUEUE *psBridgeIn;
PVRSRV_DEV_DATA sDevData;
psBridgeIn = (PVRSRV_BRIDGE_IN_CREATECOMMANDQUEUE*)pvIn;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
sDevData.psDevInfoKM = psBridgeIn->psDevInfo;
psRet->eError = PVRSRVCreateCommandQueue( &sDevData,
psBridgeIn->ui32QueueSize,
(PVRSRV_QUEUE_INFO **)&psRet->pvData);
break;
}
case PVRSRV_BRIDGE_DESTROY_COMMANDQUEUE :
{
PVRSRV_BRIDGE_IN_DESTROYCOMMANDQUEUE *psBridgeIn;
PVRSRV_DEV_DATA sDevData;
psBridgeIn = (PVRSRV_BRIDGE_IN_DESTROYCOMMANDQUEUE*)pvIn;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
sDevData.psDevInfoKM = psBridgeIn->psDevInfo;
psRet->eError = PVRSRVDestroyCommandQueue(&sDevData,
psBridgeIn->psQueueInfo);
break;
}
#ifdef PDUMP
case PVRSRV_BRIDGE_PDUMP :
{
PVRSRV_BRIDGE_IN_PDUMP_COMMAND *psBridgeIn;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
psBridgeIn = (PVRSRV_BRIDGE_IN_PDUMP_COMMAND*)pvIn;
psRet->eError = PVRSRVPDumpCommand(psBridgeIn);
psRet->pvData = (IMG_VOID*) psBridgeIn->psPDumpContext;
break;
}
#endif
case PVRSRV_BRIDGE_ACQUIRE_PRIMARY :
{
PVRSRV_BRIDGE_IN_ACQUIREPRIMARY *psBridgeIn;
PVRSRV_DEV_DATA sDevData;
psBridgeIn = (PVRSRV_BRIDGE_IN_ACQUIREPRIMARY*)pvIn;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
sDevData.psDevInfoKM = psBridgeIn->psDevInfo;
psRet->eError = PVRSRVAcquirePrimary(&sDevData,
psBridgeIn->ui32Flags,
psBridgeIn->ui32PixelWidth,
psBridgeIn->ui32PixelHeight,
psBridgeIn->ePixelFormat,
(PVRSRV_PRIMARY_SURF **)&psRet->pvData);
break;
}
case PVRSRV_BRIDGE_QUERY_PRIMARY :
{
PVRSRV_DEV_DATA sDevData;
PVRSRV_BRIDGE_OUT_QUERYPRIMARY *psBridgeOut;
psBridgeOut = (PVRSRV_BRIDGE_OUT_QUERYPRIMARY*)pvOut;
sDevData.psDevInfoKM = (PPVRSRV_DEV_INFO)pvIn;
psBridgeOut->eError = PVRSRVQueryPrimary( &sDevData,
&psBridgeOut->sPrimarySurfInfo);
break;
}
case PVRSRV_BRIDGE_RELEASE_PRIMARY :
{
PVRSRV_BRIDGE_IN_RELEASEPRIMARY *psBridgeIn;
PVRSRV_DEV_DATA sDevData;
psBridgeIn = (PVRSRV_BRIDGE_IN_RELEASEPRIMARY*)pvIn;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
sDevData.psDevInfoKM = psBridgeIn->psDevInfo;
psRet->eError = PVRSRVReleasePrimary( &sDevData,
psBridgeIn->psPrimSurf);
break;
}
#ifdef SUPPORT_DEVCLASS_MPEG
case PVRSRV_BRIDGE_MPEGCONNECT:
{
PVRSRV_BRIDGE_IN_MPEGCONNECT *psBridgeIn;
PVRSRV_DEV_DATA sDevData;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
psBridgeIn = (PVRSRV_BRIDGE_IN_MPEGCONNECT*)pvIn;
sDevData.psDevInfoKM = psBridgeIn->psDevInfo;
psBridgeIn = (PVRSRV_BRIDGE_IN_MPEGCONNECT*)pvIn;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
psRet->eError = PVRSRVConnectMPEGApplication(&sDevData, psBridgeIn->bConnect);
break;
}
#ifdef SUPPORT_3D_BLIT
case PVRSRV_BRIDGE_INIT_OVL_BLIT_RSC:
{
PVRSRV_BRIDGE_IN_INIT_OVL_BLIT_RSC *psBridgeIn;
PVRSRV_DEV_DATA sDevData;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
psBridgeIn = (PVRSRV_BRIDGE_IN_INIT_OVL_BLIT_RSC*)pvIn;
sDevData.psDevInfoKM = psBridgeIn->psDevInfo;
psRet->eError = PVRSRVInitOverlayBltResources(&sDevData,
psBridgeIn->ui32SrcWidth,
psBridgeIn->ui32SrcHeight,
psBridgeIn->ui32SrcStride,
psBridgeIn->ui32DstStride,
psBridgeIn->ui32Rotation);
break;
}
case PVRSRV_BRIDGE_DEINIT_OVL_BLIT_RSC:
{
PVRSRV_BRIDGE_IN_DEINIT_OVL_BLIT_RSC *psBridgeIn;
PVRSRV_DEV_DATA sDevData;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
psBridgeIn = (PVRSRV_BRIDGE_IN_DEINIT_OVL_BLIT_RSC*)pvIn;
sDevData.psDevInfoKM = psBridgeIn->psDevInfo;
PVRSRVDeInitOverlayBltResources(&sDevData);
psRet->eError = PVRSRV_OK;
break;
}
#endif /* SUPPORT_3D_BLIT */
#endif
case PVRSRV_BRIDGE_GET_FB_STATS:
{
PVRSRV_BRIDGE_IN_GET_FB_STATS *psBridgeIn;
PVRSRV_DEV_DATA sDevData;
psRet = (PVRSRV_BRIDGE_RETURN*)pvOut;
psBridgeIn = (PVRSRV_BRIDGE_IN_GET_FB_STATS*)pvIn;
psRet->eError = PVRSRVGetFBStats(&sDevData,
&psBridgeIn->ui32Total,
&psBridgeIn->ui32Available);
break;
}
#ifdef ENABLE_2D_PROFILE
case DRVESC_2D_PROFILE:
{
PPROFILE2D_DATA pDataIn;
if (pvIn && ulSizeIn == sizeof (PROFILE2D_DATA))
{
pDataIn = (PPROFILE2D_DATA)pvIn;
if (pDataIn->iu32Flags & PROFILEFLAG_RESET_ALL_NODES)
{
memset(gProfile, 0, sizeof(gProfile));
ulRetVal = ESC_SUCCESS;
break;
}
if (pDataIn->iu32Flags & PROFILEFLAG_GETNODE)
{
if (pvOut && ulSizeOut == sizeof (PROFILE2D_DATA))
{
PPROFILE2D_DATA pDataOut = (PPROFILE2D_DATA)pvOut;
if (pDataIn->ui32Index < NODE_MAX)
{
memset(pDataOut, 0, sizeof(PROFILE2D_DATA));
pDataOut->sNode = gProfile[pDataIn->ui32Index];
pDataOut->ui32Index = pDataIn->ui32Index;
ulRetVal = ESC_SUCCESS;
break;
}
}
}
}
SetLastError (ERROR_INVALID_PARAMETER);
ulRetVal = ESC_FAILED;
break;
}
#endif
// GAPI Legacy support.
case DRVESC_GXDMA_DRAM_TO_VRAM: // gbTrackSlaveport
{
if ( (ulSizeIn >= sizeof(DRVESC_GXDMA)) && (pvIn != NULL) )
{
GapiDmaDRAMtoVRAM((DRVESC_GXDMA*)pvIn); // gapi.cpp
ulRetVal = ESC_SUCCESS;
}
else
{
SetLastError (ERROR_INVALID_PARAMETER);
ulRetVal = ESC_FAILED;
}
break;
}
case DRVESC_GXDMA_VRAM_TO_DRAM:
{
if ( (ulSizeIn >= sizeof(DRVESC_GXDMA)) && (pvIn != NULL) )
{
GapiDmaVRAMtoDRAM((DRVESC_GXDMA*)pvIn); // gapi.cpp
ulRetVal = ESC_SUCCESS;
}
else
{
SetLastError (ERROR_INVALID_PARAMETER);
ulRetVal = ESC_FAILED;
}
break;
}
case DRVESC_GXDMA_STATUS:
{
if ( (ulSizeIn >= sizeof(DRVESC_GXDMA))
&& (pvIn != NULL)
&& (ulSizeOut >= sizeof(DRVESC_GXDMA))
&& (pvOut != NULL)
&& (pvIn == pvOut)
)
{
GapiIsDMAReady((DRVESC_GXDMA *)pvOut); // gapi.cpp
ulRetVal = ESC_SUCCESS;
}
else
{
SetLastError (ERROR_INVALID_PARAMETER);
ulRetVal = ESC_FAILED;
}
break;
}
// Pass any unrecognised codes to DispPerf.
default :
ulRetVal = DispPerfDrvEscape (ulEsc, ulSizeIn, pvIn, ulSizeOut, pvOut);
break;
}
////////// DPFEXIT((L"<-DrvEscape"));
return (ulRetVal);
}
PULONG APIENTRY DrvGetMasks(DHPDEV dhpdev)
{
MBX *pclGPE = (MBX *)dhpdev;
return (pclGPE->GetPixelTableMasks());
}
/////////////////////////////////////////////////////////////////////////
// Quote from : WINCE410\PUBLIC\COMMON\OAK\INC\pwingdi.h
// The CONTRASTCOMMAND DrvEscape is used to get/set the contrast
// on the display controlled by the driver being called. It input parameter
// shoud be a ContrastCmdInputParm structure (defined below).
//
BOOL MBX::ContrastControl ( ULONG ulCmd, ULONG *pulValue )
{
BOOL bRtn = TRUE; /* assume success */
DWORD dwValue;
if (pulValue)
{
switch (ulCmd)
{
case CONTRAST_CMD_GET:
*pulValue = 128;
m_clDisplay.PDP_Contrast (pulValue, TRUE); // Get
break;
case CONTRAST_CMD_SET:
if(*pulValue>255)
{
// As the incoming value is an ULONG this catches both the -ative and the positive
SetLastError(ERROR_INVALID_PARAMETER);
bRtn = FALSE;
}
else
{
m_clDisplay.PDP_Contrast (pulValue, FALSE); // Set
}
break;
case CONTRAST_CMD_INCREASE:
m_clDisplay.PDP_Contrast (&dwValue, TRUE); // Get
if(dwValue + *pulValue >255)
{
*pulValue=255;
}
else
{
*pulValue=dwValue + *pulValue;
}
m_clDisplay.PDP_Contrast (pulValue, FALSE); // Set
break;
case CONTRAST_CMD_DECREASE:
m_clDisplay.PDP_Contrast (&dwValue, TRUE); // Get
if(*pulValue >dwValue)
{
*pulValue=0;
}
else
{
*pulValue = dwValue-*pulValue;
}
m_clDisplay.PDP_Contrast (pulValue, FALSE); // Set
break;
case CONTRAST_CMD_DEFAULT:
*pulValue = 128;
m_clDisplay.PDP_Contrast (pulValue, FALSE); // Set
break;
case CONTRAST_CMD_MAX:
*pulValue = 255;
m_clDisplay.PDP_Contrast (pulValue, FALSE); // Set
break;
default:
SetLastError(ERROR_INVALID_PARAMETER);
bRtn = FALSE;
break;
}
}
else
{
SetLastError(ERROR_INVALID_PARAMETER);
bRtn = FALSE;
}
return (bRtn);
}
/*****************************************************************************/
/***************************** M24VA escape functions ************************/
/*****************************************************************************/
#ifdef SUPPORT_M24VA
#undef malloc
#undef free
/*****************************************************************************
FUNCTION : AcquireM24VA
PURPOSE : Acquire M24VA hardware
PARAMETERS : DRVESC_M24VA_CONFIG_PARAMS *pConfig
RETURNS : Success code
*****************************************************************************/
typedef struct
{
HANDLE hM24VAProcOwner;
HANDLE hTerminateEvent;
} MONITOR_THREAD_PARAMS, *PMONITOR_THREAD_PARAMS;
static ULONG MonitorThreadProc(PVOID pvParameter)
{
DRVESC_M24VA_ACQUIRE_PARAMS sM24VAAcquire;
PMONITOR_THREAD_PARAMS pMonParams = (PMONITOR_THREAD_PARAMS) pvParameter;
HANDLE ahObjects[2];
ahObjects[0] = pMonParams->hM24VAProcOwner;
ahObjects[1] = pMonParams->hTerminateEvent;
switch(WaitForMultipleObjects(2, ahObjects, FALSE, INFINITE))
{
case WAIT_OBJECT_0:
/* Process that owner M24VA hardware has terminated without releasing
the hardware. Send release driver escape */
sM24VAAcquire.dwAcquire = FALSE;
sM24VAAcquire.dwProcessID = 0;
ExtEscape(GetWindowDC(NULL), DRVESC_M24VA_ACQUIRE, 0, NULL,
sizeof(sM24VAAcquire), (LPSTR)&sM24VAAcquire);
break;
case (WAIT_OBJECT_0+1):
/* AcquireM24VA function has asked us to terminate */
break;
}
free(pMonParams);
return(0);
}
DWORD MBX::AcquireM24VA(DRVESC_M24VA_ACQUIRE_PARAMS *pAcquire)
{
PMONITOR_THREAD_PARAMS pMonParams;
if(pAcquire->dwAcquire)
{
/* Acquire M24VA hardware */
if(m_hM24VAOwner)
{
return(ERROR_INVALID_PARAMETER);
}
if((m_hM24VAOwner = OpenProcess(0, FALSE, pAcquire->dwProcessID)) == NULL ||
(m_hTerminateMonitorThread = CreateEvent(NULL, FALSE, FALSE, NULL)) == NULL)
{
if(m_hM24VAOwner) CloseHandle(m_hM24VAOwner);
return(ERROR_INVALID_PARAMETER);
}
pMonParams = (PMONITOR_THREAD_PARAMS) malloc(sizeof(MONITOR_THREAD_PARAMS));
pMonParams->hM24VAProcOwner = m_hM24VAOwner;
pMonParams->hTerminateEvent = m_hTerminateMonitorThread;
if((m_hProcessMonitorThread = CreateThread(NULL, 0, MonitorThreadProc, pMonParams, 0, NULL)) == NULL)
{
CloseHandle(m_hM24VAOwner); m_hM24VAOwner = NULL;
return(ERROR_INVALID_PARAMETER);
}
m_bOverlayUsed = FALSE; /* Tracking overlay usable since acquire */
SysCoreEnable(m_sDevData.psDevInfoKM, DEV_CGCORE_M24VA, IMG_TRUE); // Turn on M24VA core
}
else
{
DWORD dwRtn;
/* Release M24VA hardware */
if(!m_hM24VAOwner)
{
return(ERROR_INVALID_PARAMETER);
}
/* Closedown monitor thread */
if(pAcquire->dwProcessID) /* ID of zero indicates process termination */
{
SetEvent(m_hTerminateMonitorThread);
dwRtn = WaitForSingleObject(m_hProcessMonitorThread, 1000);
}
CloseHandle(m_hM24VAOwner); m_hM24VAOwner = NULL;
CloseHandle(m_hProcessMonitorThread); m_hProcessMonitorThread = NULL;
CloseHandle(m_hTerminateMonitorThread); m_hTerminateMonitorThread = NULL;
/* Make sure that the overlay has been disabled */
if(m_bOverlayUsed)
{
PDP_OVERLAYATTRIBS sOverlay;
sOverlay.wValidFlags = PDP_OVERLAYATTRIB_VALID_VISIBILITY |
PDP_OVERLAYATTRIB_VALID_PIXFMT;
sOverlay.PixFormat = PDP_OVL_INVALID;
sOverlay.bOverlayOn = FALSE;
m_clDisplay.PDP_SetOverlayAttributes(&sOverlay);
}
SysCoreDisable(m_sDevData.psDevInfoKM, DEV_CGCORE_M24VA, IMG_TRUE); // Turn on M24VA core
}
return(ERROR_SUCCESS);
}
#endif /* SUPPORT_M24VA */
/********************************** end of file ******************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -