📄 services_test.cpp
字号:
auBltPacket[2] = MBX2D_BLIT_BH
| MBX2D_USE_FILL
| MBX2D_ROP3_PATCOPY;
auBltPacket[3] = (x|y)|((x<<9)|(y<<9));/* change colour as we go*/
auBltPacket[4] = (x << MBX2D_DST_XSTART_SHIFT)
| (y << MBX2D_DST_YSTART_SHIFT);
auBltPacket[5] = ((x+100) << MBX2D_DST_XEND_SHIFT)
| ((y+100) << MBX2D_DST_YEND_SHIFT);
auBltPacket[6] = MBX2D_FENCE_BH;
eResult = PVRSRVQueueBlt( &asDevData[0],
psQueueInfo,
psPrimarySurf->psMemInfo->psSyncInfo,
0,
IMG_NULL,
7,
auBltPacket);
HostSleepus(100);
FAIL_IF_ERROR(eResult);
}
}
/////printf("blits finished\n");
#if 0
/*
because we don't have isr kicking in place in
the driver we need to flush the cmds manually
TODO: would be useful to deref sync pointers in UM
*/
for(i=0; i<1000; i++)
{
HostSleepus(10);
/* use this as kicking function */
PVRSRVUpdateQueue(&asDevData[0], psQueueInfo, 0);
}
#endif
/* We are going to deinit the display soon, so give us 2 secs to look at the results */
HostSleepus(2000000);
/////printf("Attempt to create parameter buffer\n");
eResult = PVRSRVCreateParameterBuffer ( &asDevData[0], 4 * 1024 * 1024);
FAIL_IF_ERROR(eResult);
/////printf("Attempt to alloc device mem\n");
eResult = PVRSRVAllocDeviceMem (&asDevData[0],
PVRSRV_MEMFLG_RENDERABLE,
320*240*2,
2,
&psMemInfo);
FAIL_IF_ERROR(eResult);
/////printf("Attempt to look inside meminfo\n");
/////printf("psMemInfo->ui32AllocSize = %ld\n",psMemInfo->ui32AllocSize);
/////printf("psMemInfo->uiDevAddr = %lx\n",psMemInfo->uiDevAddr);
/////printf("psMemInfo->pvLinAddr = %p\n",psMemInfo->pvLinAddr);
/////printf("psMemInfo->pvLinAddr[50] = %lx\n",((IMG_UINT32 *)psMemInfo->pvLinAddr)[50]);
/////printf("Attempt to add render target\n");
eResult = PVRSRVAddRenderTarget(&asDevData[0],
320,
240,
&psTARenderInfo);
FAIL_IF_ERROR(eResult);
/////printf("Attempt to look inside render target\n");
/////printf("psTARenderInfo->psTARenderInfoKM = %p\n",psTARenderInfo->psTARenderInfoKM);
/////printf("psTARenderInfo->psSharedData = %p\n",psTARenderInfo->psSharedData);
/////printf("psSharedData->ui32TilesX = %lx\n",psTARenderInfo->psSharedData->ui32TilesX);
/////printf("psSharedData->ui32TilesY = %lx\n",psTARenderInfo->psSharedData->ui32TilesY);
/////printf("psSharedData->asRgnHeaderDevVAddr[0] = %lx\n",psTARenderInfo->psSharedData->asRgnHeaderDevVAddr[0].uiAddr);
/////printf("psSharedData->asRgnHeaderDevVAddr[1] = %lx\n",psTARenderInfo->psSharedData->asRgnHeaderDevVAddr[1].uiAddr);
/////printf("psSharedData->EVMContextDevVAddr = %lx\n",psTARenderInfo->psSharedData->EVMContextDevVAddr.uiAddr);
/////printf("psSharedData->TAContextDevVAddr = %lx\n",psTARenderInfo->psSharedData->TAContextDevVAddr.uiAddr);
/////printf("psSharedData->TailPtrDevVAddr = %lx\n",psTARenderInfo->psSharedData->TailPtrDevVAddr.uiAddr);
/* FIXME: need a setmode - for now just flip to primary address */
WriteHWReg (psTARenderInfo->pvRegBase,
JDISPLAY_GLOBREG_LCD_FBBASE,
psPrimarySurf->psMemInfo->uiDevAddr);
/////printf("Acquiring the TA\n");
eResult = PVRSRVAcquireTA (asDevData[0].psDevInfoUM,
psTARenderInfo,
IMG_TRUE,/*bFirstTAInScene*/
IMG_TRUE,/*bBlock,*/
&bHasContextSwitched);
FAIL_IF_ERROR(eResult);
eResult = PVRSRVAcquireSlavePort (asDevData[0].psDevInfoUM, PVRSRV_SLAVEPORT_3D, IMG_TRUE);
FAIL_IF_ERROR(eResult);
/////printf("setup TA regs and start TA \n");
WriteHWReg (psTARenderInfo->pvRegBase,
MBX1_TAGLOBREG_REGION_BASE,
psTARenderInfo->psSharedData->asRgnHeaderDevVAddr[psTARenderInfo->psSharedData->ui32CurrentRenderData].uiAddr);
WriteHWReg (psTARenderInfo->pvRegBase,
MBX1_TAGLOBREG_TAILPTRBASE,
psTARenderInfo->psSharedData->TailPtrDevVAddr.uiAddr);
WriteHWReg(psTARenderInfo->pvRegBase, MBX1_TAGLOBREG_CONFIG, 0x01303421);
WriteHWReg(psTARenderInfo->pvRegBase, MBX1_TAGLOBREG_XCLIP, 0x013E0000);
WriteHWReg(psTARenderInfo->pvRegBase, MBX1_TAGLOBREG_YCLIP, 0x00D70000);
WriteHWReg(psTARenderInfo->pvRegBase, MBX1_TAGLOBREG_RHWCLAMP, 0x0DA24260);
WriteHWReg(psTARenderInfo->pvRegBase, MBX1_TAGLOBREG_RHWCLAMP, 0x0DA24260);
WriteHWReg(psTARenderInfo->pvRegBase, MBX1_TAGLOBREG_GLOBAL_LIST_CTRL, 0x00640040);
WriteHWReg(psTARenderInfo->pvRegBase, MBX1_TAGLOBREG_3DSCREENSIZE, 0x10);
WriteHWReg(psTARenderInfo->pvRegBase, MBX1_TAGLOBREG_START, 0x00000001);
/////printf("Writing TA Data stream\n");
pvSPData = asDevData[0].psUserDevInfo->sDeviceSpecific.sMBX.pvSPData;
pvSPControl = asDevData[0].psUserDevInfo->sDeviceSpecific.sMBX.pvSPControl;
eResult = PVRSRVAcquireFifoSpace (&asDevData[0], IMG_TRUE, PVRSRV_SLAVEPORT_3D, 64*4, NULL);
FAIL_IF_ERROR(eResult);
PVRSRVWriteSlavePort(pvSPData, 0x1000004F);
PVRSRVWriteSlavePort(pvSPData, 0x22620E80);
PVRSRVWriteSlavePort(pvSPData, 0xE01FFFFF);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x92000000);
PVRSRVWriteSlavePort(pvSPData, 0xC6086610);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0xC6086610);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x10000010);
PVRSRVWriteSlavePort(pvSPData, 0x2004C00D);
PVRSRVWriteSlavePort(pvSPData, 0x10000003);
PVRSRVWriteSlavePort(pvSPData, 0x22207F80);
PVRSRVWriteSlavePort(pvSPData, 0xE0000000);
PVRSRVWriteSlavePort(pvSPData, 0x40100000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x43E00000);
PVRSRVWriteSlavePort(pvSPData, 0x3F800000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x3F800000);
PVRSRVWriteSlavePort(pvSPData, 0x44200000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x3F800000);
/* terminate block */
PVRSRVWriteSlavePort(pvSPControl, 1);
eResult = PVRSRVAcquireFifoSpace (&asDevData[0], IMG_TRUE, PVRSRV_SLAVEPORT_3D, 64*4, NULL);
FAIL_IF_ERROR(eResult);
PVRSRVWriteSlavePort(pvSPData, 0x10000005);
PVRSRVWriteSlavePort(pvSPData, 0x22220F00);
PVRSRVWriteSlavePort(pvSPData, 0xA8804000);
PVRSRVWriteSlavePort(pvSPData, 0x00500F20);
PVRSRVWriteSlavePort(pvSPData, 0xD6087610);
PVRSRVWriteSlavePort(pvSPData, 0x40100000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x43600000);
PVRSRVWriteSlavePort(pvSPData, 0x47C35000);
PVRSRVWriteSlavePort(pvSPData, 0x00800000);
PVRSRVWriteSlavePort(pvSPData, 0xFFFFFFFF);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x3DE00000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x47C35000);
PVRSRVWriteSlavePort(pvSPData, 0x00800000);
PVRSRVWriteSlavePort(pvSPData, 0xFFFFFFFF);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x43A00000);
PVRSRVWriteSlavePort(pvSPData, 0x43600000);
PVRSRVWriteSlavePort(pvSPData, 0x47C35000);
PVRSRVWriteSlavePort(pvSPData, 0x00800000);
PVRSRVWriteSlavePort(pvSPData, 0xFFFFFFFF);
PVRSRVWriteSlavePort(pvSPData, 0x3E200000);
PVRSRVWriteSlavePort(pvSPData, 0x3DE00000);
PVRSRVWriteSlavePort(pvSPData, 0x43A00000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x47C35000);
PVRSRVWriteSlavePort(pvSPData, 0x00800000);
PVRSRVWriteSlavePort(pvSPData, 0xFFFFFFFF);
PVRSRVWriteSlavePort(pvSPData, 0x3E200000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
/* terminate block */
PVRSRVWriteSlavePort(pvSPControl, 1);
eResult = PVRSRVAcquireFifoSpace (&asDevData[0], IMG_TRUE, PVRSRV_SLAVEPORT_3D, 64*4, NULL);
FAIL_IF_ERROR(eResult);
PVRSRVWriteSlavePort(pvSPData, 0x10000001);
PVRSRVWriteSlavePort(pvSPData, 0x22200E80);
PVRSRVWriteSlavePort(pvSPData, 0x40100000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x43E00000);
PVRSRVWriteSlavePort(pvSPData, 0x3F800000);
PVRSRVWriteSlavePort(pvSPData, 0x3F800000);
PVRSRVWriteSlavePort(pvSPData, 0xFF404040);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x3F800000);
PVRSRVWriteSlavePort(pvSPData, 0x3F800000);
PVRSRVWriteSlavePort(pvSPData, 0xFF404040);
PVRSRVWriteSlavePort(pvSPData, 0x44200000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x3F800000);
PVRSRVWriteSlavePort(pvSPData, 0x3F800000);
PVRSRVWriteSlavePort(pvSPData, 0xFF404040);
/* terminate block */
PVRSRVWriteSlavePort(pvSPControl, 1);
eResult = PVRSRVAcquireFifoSpace (&asDevData[0], IMG_TRUE, PVRSRV_SLAVEPORT_3D, 64*4, NULL);
FAIL_IF_ERROR(eResult);
PVRSRVWriteSlavePort(pvSPData, 0x10000007);
PVRSRVWriteSlavePort(pvSPData, 0x22620E80);
PVRSRVWriteSlavePort(pvSPData, 0xE01FFFFF);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x92000000);
PVRSRVWriteSlavePort(pvSPData, 0xC6086610);
PVRSRVWriteSlavePort(pvSPData, 0x700A0000);
PVRSRVWriteSlavePort(pvSPData, 0x431F0000);
PVRSRVWriteSlavePort(pvSPData, 0x431B471C);
PVRSRVWriteSlavePort(pvSPData, 0x3ED55556);
PVRSRVWriteSlavePort(pvSPData, 0x3E088889);
PVRSRVWriteSlavePort(pvSPData, 0x000000FF);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x434EC71D);
PVRSRVWriteSlavePort(pvSPData, 0x426EE390);
PVRSRVWriteSlavePort(pvSPData, 0x3ED55556);
PVRSRVWriteSlavePort(pvSPData, 0x3E088889);
PVRSRVWriteSlavePort(pvSPData, 0x0000FF00);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x42DE71C8);
PVRSRVWriteSlavePort(pvSPData, 0x426EE390);
PVRSRVWriteSlavePort(pvSPData, 0x3ED55556);
PVRSRVWriteSlavePort(pvSPData, 0x3E088889);
PVRSRVWriteSlavePort(pvSPData, 0x00FF0000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x42DE71C8);
PVRSRVWriteSlavePort(pvSPData, 0x426EE390);
PVRSRVWriteSlavePort(pvSPData, 0x3ED55556);
PVRSRVWriteSlavePort(pvSPData, 0x3E088889);
PVRSRVWriteSlavePort(pvSPData, 0x00FF0000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x434EC71D);
PVRSRVWriteSlavePort(pvSPData, 0x426EE390);
PVRSRVWriteSlavePort(pvSPData, 0x3ED55556);
PVRSRVWriteSlavePort(pvSPData, 0x3E088889);
PVRSRVWriteSlavePort(pvSPData, 0x0000FF00);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x431F0000);
PVRSRVWriteSlavePort(pvSPData, 0x431B471C);
PVRSRVWriteSlavePort(pvSPData, 0x3ED55556);
PVRSRVWriteSlavePort(pvSPData, 0x3E088889);
PVRSRVWriteSlavePort(pvSPData, 0x000000FF);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
PVRSRVWriteSlavePort(pvSPData, 0x00000000);
/* terminate block */
PVRSRVWriteSlavePort(pvSPControl, 1);
WriteHWReg(psTARenderInfo->pvRegBase, MBX1_TAGLOBREG_CONFIG, 0x013034A1);
PVRSRVWriteSlavePort(pvSPData, 0xF0000000);
eResult = PVRSRVReleaseSlavePort (asDevData[0].psDevInfoUM, PVRSRV_SLAVEPORT_3D);
FAIL_IF_ERROR(eResult);
/////printf("Releasing the TA\n");
eResult = PVRSRVReleaseTA (asDevData[0].psDevInfoUM);
FAIL_IF_ERROR(eResult);
/////printf("poll for TA complete\n");
/* wait for TAcomplete ISR as we have no re-try right now */
eResult = PollForValue ((IMG_UINT32*)&asDevData[0].psDevInfoUM->sDeviceSpecific.s3D.bTAIdle,
IMG_TRUE,
0xFFFFFFFF,
1000,
1000);
FAIL_IF_ERROR(eResult);
/////printf("setup 3D regs and start 3D \n");
ps3DRegs = s3DRegs;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_3D_RENDER_ID;
ps3DRegs->ui32RegVal = psTARenderInfo->psSharedData->ui32HWContextID;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_RGNBASE;
ps3DRegs->ui32RegVal = psTARenderInfo->psSharedData->asRgnHeaderDevVAddr[psTARenderInfo->psSharedData->ui32CurrentRenderData].uiAddr;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_ZLOADSTORE;
ps3DRegs->ui32RegVal = 0;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_FPUPERPVAL;
ps3DRegs->ui32RegVal = 0x1E3CE508;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_FPUCULLVAL;
ps3DRegs->ui32RegVal = 0x1E3CE508;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_3DPIXSAMP;
ps3DRegs->ui32RegVal = 0x00020004;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_FOGCOLVERT;
ps3DRegs->ui32RegVal = 0x01000000;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_SCALERCTL;
ps3DRegs->ui32RegVal = 0;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_BLENDCTL;
ps3DRegs->ui32RegVal = 0x00010001;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_FBCTL;
ps3DRegs->ui32RegVal = MBX1_FBCTL_PACKMODE565;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_FBXCLIP;
ps3DRegs->ui32RegVal = 0x013D0000;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_FBYCLIP;
ps3DRegs->ui32RegVal = 0x00D60000;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_FBSTART;
ps3DRegs->ui32RegVal = psPrimarySurf->psMemInfo->uiDevAddr;/* primary address */
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_FBLINESTRIDE;
ps3DRegs->ui32RegVal = 0x000000A0;/* primary stride */
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_3DFLATSHADEDCS;
ps3DRegs->ui32RegVal = 0x1;
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_3D_ZL_BACKGROUND_TAG;
ps3DRegs->ui32RegVal = 0x09000000; /* FIXME: */
ps3DRegs++;
ps3DRegs->ui32RegAddr = MBX1_GLOBREG_STARTRENDER;
ps3DRegs->ui32RegVal = 1;
sBGObj.ui32TexFormatStride = MBX1_TSPPL1_TPIXFORM565 | 0;
sBGObj.ui32TexAddrStride = (psPrimarySurf->psMemInfo->uiDevAddr >> MBX1_TSPPL2_TEXADDRALIGNSHIFT) |
((0xA0 >> MBX1_TSPPL2_TEXSTRIDEUNITSHIFT) << MBX1_TSPPL2_TEXSTRIDESHIFT);
eResult = PVRSRVQueueRender (&asDevData[0],
psQueueInfo,
psTARenderInfo,
&sBGObj,
psPrimarySurf->psMemInfo->psSyncInfo,
0,
NULL,
17,
s3DRegs);
FAIL_IF_ERROR(eResult);
/* We are going to deinit the display soon, so give us 2 secs to look at the results */
HostSleepus(2000000);
/////printf("Attempt to remove render target\n");
eResult = PVRSRVRemoveRenderTarget(&asDevData[0], psTARenderInfo);
FAIL_IF_ERROR(eResult);
/////printf("Attempt to free device mem\n");
eResult = PVRSRVFreeDeviceMem (&asDevData[0],
psMemInfo);
FAIL_IF_ERROR(eResult);
/////printf("Attempt to destroy parameter buffer\n");
eResult = PVRSRVDestroyParameterBuffer(&asDevData[0]);
FAIL_IF_ERROR(eResult);
/////printf("Attempt to destroy command queue");
eResult = PVRSRVDestroyCommandQueue(&asDevData[0], psQueueInfo);
FAIL_IF_ERROR(eResult);
/////printf("Attempt to destroy primary");
eResult = PVRSRVDestroyPrimary(&asDevData[0], psPrimarySurf);
FAIL_IF_ERROR(eResult);
for (ui32Count = 0; ui32Count < uiNumDevices; ui32Count++)
{
IMG_UINT32 uiDeviceIndex = uiNumDevices - ui32Count - 1;
PVRSRV_DEV_DATA* pDevData = asDevData + uiDeviceIndex;
/////printf("Release device %d :-", (int) uiDeviceIndex);
eResult = PVRSRVReleaseDeviceData(pDevData);
FAIL_IF_ERROR(eResult);
}
//eResult = PVRSRVDisconnect(hServices);
FAIL_IF_ERROR(eResult);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -