📄 radeon.h
字号:
int scanline_w; int scanline_h; int scanline_h_w; int scanline_words; int scanline_direct; int scanline_bpp; /* Only used for ImageWrite */ int scanline_fg; int scanline_bg; int scanline_hpass; int scanline_x1clip; int scanline_x2clip; /* Saved values for DashedTwoPointLine */ int dashLen; CARD32 dashPattern; int dash_fg; int dash_bg; DGAModePtr DGAModes; int numDGAModes; Bool DGAactive; int DGAViewportStatus; DGAFunctionRec DGAFuncs; RADEONFBLayout CurrentLayout;#ifdef XF86DRI Bool noBackBuffer; Bool directRenderingEnabled; DRIInfoPtr pDRIInfo; int drmFD; int numVisualConfigs; __GLXvisualConfig *pVisualConfigs; RADEONConfigPrivPtr pVisualConfigsPriv; drmHandle fbHandle; drmSize registerSize; drmHandle registerHandle; Bool IsPCI; /* Current card is a PCI card */ drmSize pciSize; drmHandle pciMemHandle; unsigned char *PCI; /* Map */ Bool depthMoves; /* Enable depth moves -- slow! */ Bool allowPageFlip; /* Enable 3d page flipping */ Bool have3DWindows; /* Are there any 3d clients? */ int drmMinor; drmSize gartSize; drmHandle agpMemHandle; /* Handle from drmAgpAlloc */ unsigned long gartOffset; unsigned char *AGP; /* Map */ int agpMode; int agpFastWrite; CARD32 pciCommand; Bool CPRuns; /* CP is running */ Bool CPInUse; /* CP has been used by X server */ Bool CPStarted; /* CP has started */ int CPMode; /* CP mode that server/clients use */ int CPFifoSize; /* Size of the CP command FIFO */ int CPusecTimeout; /* CP timeout in usecs */ /* CP ring buffer data */ unsigned long ringStart; /* Offset into GART space */ drmHandle ringHandle; /* Handle from drmAddMap */ drmSize ringMapSize; /* Size of map */ int ringSize; /* Size of ring (in MB) */ unsigned char *ring; /* Map */ int ringSizeLog2QW; unsigned long ringReadOffset; /* Offset into GART space */ drmHandle ringReadPtrHandle; /* Handle from drmAddMap */ drmSize ringReadMapSize; /* Size of map */ unsigned char *ringReadPtr; /* Map */ /* CP vertex/indirect buffer data */ unsigned long bufStart; /* Offset into GART space */ drmHandle bufHandle; /* Handle from drmAddMap */ drmSize bufMapSize; /* Size of map */ int bufSize; /* Size of buffers (in MB) */ unsigned char *buf; /* Map */ int bufNumBufs; /* Number of buffers */ drmBufMapPtr buffers; /* Buffer map */ /* CP GART Texture data */ unsigned long gartTexStart; /* Offset into GART space */ drmHandle gartTexHandle; /* Handle from drmAddMap */ drmSize gartTexMapSize; /* Size of map */ int gartTexSize; /* Size of GART tex space (in MB) */ unsigned char *gartTex; /* Map */ int log2GARTTexGran; /* CP accleration */ drmBufPtr indirectBuffer; int indirectStart; /* DRI screen private data */ int fbX; int fbY; int backX; int backY; int depthX; int depthY; int frontOffset; int frontPitch; int backOffset; int backPitch; int depthOffset; int depthPitch; int textureOffset; int textureSize; int log2TexGran; CARD32 frontPitchOffset; CARD32 backPitchOffset; CARD32 depthPitchOffset; CARD32 dst_pitch_offset; /* offscreen memory management */ int backLines; FBAreaPtr backArea; int depthTexLines; FBAreaPtr depthTexArea; /* Saved scissor values */ CARD32 sc_left; CARD32 sc_right; CARD32 sc_top; CARD32 sc_bottom; CARD32 re_top_left; CARD32 re_width_height; CARD32 aux_sc_cntl; int irq;#ifdef PER_CONTEXT_SAREA int perctx_sarea_size;#endif#endif /* XVideo */ XF86VideoAdaptorPtr adaptor; void (*VideoTimerCallback)(ScrnInfoPtr, Time); FBLinearPtr videoLinear; int videoKey; /* general */ Bool showCache; OptionInfoPtr Options;#ifdef XFree86LOADER XF86ModReqInfo xaaReq;#endif} RADEONInfoRec, *RADEONInfoPtr;#define RADEONWaitForFifo(pScrn, entries) \do { \ if (info->fifo_slots < entries) \ RADEONWaitForFifoFunction(pScrn, entries); \ info->fifo_slots -= entries; \} while (0)extern void RADEONWaitForFifoFunction(ScrnInfoPtr pScrn, int entries);extern void RADEONWaitForIdleMMIO(ScrnInfoPtr pScrn);#ifdef XF86DRIextern void RADEONWaitForIdleCP(ScrnInfoPtr pScrn);#endifextern void RADEONDoAdjustFrame(ScrnInfoPtr pScrn, int x, int y, int clone);extern void RADEONEngineReset(ScrnInfoPtr pScrn);extern void RADEONEngineFlush(ScrnInfoPtr pScrn);extern void RADEONEngineRestore(ScrnInfoPtr pScrn);extern unsigned RADEONINPLL(ScrnInfoPtr pScrn, int addr);extern void RADEONWaitForVerticalSync(ScrnInfoPtr pScrn);extern void RADEONWaitForVerticalSync2(ScrnInfoPtr pScrn);extern void RADEONSelectBuffer(ScrnInfoPtr pScrn, int buffer);extern Bool RADEONAccelInit(ScreenPtr pScreen);extern void RADEONEngineInit(ScrnInfoPtr pScrn);extern Bool RADEONCursorInit(ScreenPtr pScreen);extern Bool RADEONDGAInit(ScreenPtr pScreen);extern int RADEONMinBits(int val);extern void RADEONInitVideo(ScreenPtr pScreen);extern void RADEONResetVideo(ScrnInfoPtr pScrn);extern void R300CGWorkaround(ScrnInfoPtr pScrn);#ifdef XF86DRIextern Bool RADEONDRIScreenInit(ScreenPtr pScreen);extern void RADEONDRICloseScreen(ScreenPtr pScreen);extern void RADEONDRIResume(ScreenPtr pScreen);extern Bool RADEONDRIFinishScreenInit(ScreenPtr pScreen);extern drmBufPtr RADEONCPGetBuffer(ScrnInfoPtr pScrn);extern void RADEONCPFlushIndirect(ScrnInfoPtr pScrn, int discard);extern void RADEONCPReleaseIndirect(ScrnInfoPtr pScrn);extern int RADEONCPStop(ScrnInfoPtr pScrn, RADEONInfoPtr info);#define RADEONCP_START(pScrn, info) \do { \ int _ret = drmCommandNone(info->drmFD, DRM_RADEON_CP_START); \ if (_ret) { \ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, \ "%s: CP start %d\n", __FUNCTION__, _ret); \ } \ info->CPStarted = TRUE; \} while (0)#define RADEONCP_STOP(pScrn, info) \do { \ int _ret; \ if (info->CPStarted) { \ _ret = RADEONCPStop(pScrn, info); \ if (_ret) { \ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, \ "%s: CP stop %d\n", __FUNCTION__, _ret); \ } \ info->CPStarted = FALSE; \ } \ RADEONEngineRestore(pScrn); \ info->CPRuns = FALSE; \} while (0)#define RADEONCP_RESET(pScrn, info) \do { \ if (RADEONCP_USE_RING_BUFFER(info->CPMode)) { \ int _ret = drmCommandNone(info->drmFD, DRM_RADEON_CP_RESET); \ if (_ret) { \ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, \ "%s: CP reset %d\n", __FUNCTION__, _ret); \ } \ } \} while (0)#define RADEONCP_REFRESH(pScrn, info) \do { \ if (!info->CPInUse) { \ RADEON_WAIT_UNTIL_IDLE(); \ BEGIN_RING(6); \ OUT_RING_REG(RADEON_RE_TOP_LEFT, info->re_top_left); \ OUT_RING_REG(RADEON_RE_WIDTH_HEIGHT, info->re_width_height); \ OUT_RING_REG(RADEON_AUX_SC_CNTL, info->aux_sc_cntl); \ ADVANCE_RING(); \ info->CPInUse = TRUE; \ } \} while (0)#define CP_PACKET0(reg, n) \ (RADEON_CP_PACKET0 | ((n) << 16) | ((reg) >> 2))#define CP_PACKET1(reg0, reg1) \ (RADEON_CP_PACKET1 | (((reg1) >> 2) << 11) | ((reg0) >> 2))#define CP_PACKET2() \ (RADEON_CP_PACKET2)#define CP_PACKET3(pkt, n) \ (RADEON_CP_PACKET3 | (pkt) | ((n) << 16))#define RADEON_VERBOSE 0#define RING_LOCALS CARD32 *__head = NULL; int __count = 0#define BEGIN_RING(n) do { \ if (RADEON_VERBOSE) { \ xf86DrvMsg(pScrn->scrnIndex, X_INFO, \ "BEGIN_RING(%d) in %s\n", n, __FUNCTION__); \ } \ if (!info->indirectBuffer) { \ info->indirectBuffer = RADEONCPGetBuffer(pScrn); \ info->indirectStart = 0; \ } else if (info->indirectBuffer->used + (n) * (int)sizeof(CARD32) > \ info->indirectBuffer->total) { \ RADEONCPFlushIndirect(pScrn, 1); \ } \ __head = (pointer)((char *)info->indirectBuffer->address + \ info->indirectBuffer->used); \ __count = 0; \} while (0)#define ADVANCE_RING() do { \ if (RADEON_VERBOSE) { \ xf86DrvMsg(pScrn->scrnIndex, X_INFO, \ "ADVANCE_RING() start: %d used: %d count: %d\n", \ info->indirectStart, \ info->indirectBuffer->used, \ __count * sizeof(CARD32)); \ } \ info->indirectBuffer->used += __count * (int)sizeof(CARD32); \} while (0)#define OUT_RING(x) do { \ if (RADEON_VERBOSE) { \ xf86DrvMsg(pScrn->scrnIndex, X_INFO, \ " OUT_RING(0x%08x)\n", (unsigned int)(x)); \ } \ __head[__count++] = (x); \} while (0)#define OUT_RING_REG(reg, val) \do { \ OUT_RING(CP_PACKET0(reg, 0)); \ OUT_RING(val); \} while (0)#define FLUSH_RING() \do { \ if (RADEON_VERBOSE) \ xf86DrvMsg(pScrn->scrnIndex, X_INFO, \ "FLUSH_RING in %s\n", __FUNCTION__); \ if (info->indirectBuffer) { \ RADEONCPFlushIndirect(pScrn, 0); \ } \} while (0)#define RADEON_WAIT_UNTIL_2D_IDLE() \do { \ BEGIN_RING(2); \ OUT_RING(CP_PACKET0(RADEON_WAIT_UNTIL, 0)); \ OUT_RING((RADEON_WAIT_2D_IDLECLEAN | \ RADEON_WAIT_HOST_IDLECLEAN)); \ ADVANCE_RING(); \} while (0)#define RADEON_WAIT_UNTIL_3D_IDLE() \do { \ BEGIN_RING(2); \ OUT_RING(CP_PACKET0(RADEON_WAIT_UNTIL, 0)); \ OUT_RING((RADEON_WAIT_3D_IDLECLEAN | \ RADEON_WAIT_HOST_IDLECLEAN)); \ ADVANCE_RING(); \} while (0)#define RADEON_WAIT_UNTIL_IDLE() \do { \ if (RADEON_VERBOSE) { \ xf86DrvMsg(pScrn->scrnIndex, X_INFO, \ "WAIT_UNTIL_IDLE() in %s\n", __FUNCTION__); \ } \ BEGIN_RING(2); \ OUT_RING(CP_PACKET0(RADEON_WAIT_UNTIL, 0)); \ OUT_RING((RADEON_WAIT_2D_IDLECLEAN | \ RADEON_WAIT_3D_IDLECLEAN | \ RADEON_WAIT_HOST_IDLECLEAN)); \ ADVANCE_RING(); \} while (0)#define RADEON_FLUSH_CACHE() \do { \ BEGIN_RING(2); \ OUT_RING(CP_PACKET0(RADEON_RB2D_DSTCACHE_CTLSTAT, 0)); \ OUT_RING(RADEON_RB2D_DC_FLUSH); \ ADVANCE_RING(); \} while (0)#define RADEON_PURGE_CACHE() \do { \ BEGIN_RING(2); \ OUT_RING(CP_PACKET0(RADEON_RB2D_DSTCACHE_CTLSTAT, 0)); \ OUT_RING(RADEON_RB2D_DC_FLUSH_ALL); \ ADVANCE_RING(); \} while (0)#endif /* XF86DRI */#endif /* _RADEON_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -