Don't map the front buffer in libdri if the ddx driver doesn't set the size.
This lets drivers map the front buffer themselves by setting dontMapFramebuffer.
This commit is contained in:
parent
cec793ef7a
commit
50cb6c7e44
|
@ -311,6 +311,8 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
|
||||||
Bool xineramaInCore = FALSE;
|
Bool xineramaInCore = FALSE;
|
||||||
DRIEntPrivPtr pDRIEntPriv;
|
DRIEntPrivPtr pDRIEntPriv;
|
||||||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||||
|
DRIContextFlags flags = 0;
|
||||||
|
DRIContextPrivPtr pDRIContextPriv;
|
||||||
|
|
||||||
/* If the DRI extension is disabled, do not initialize the DRI */
|
/* If the DRI extension is disabled, do not initialize the DRI */
|
||||||
if (noXFree86DRIExtension) {
|
if (noXFree86DRIExtension) {
|
||||||
|
@ -416,12 +418,14 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
|
||||||
pDRIPriv->hLSAREA = pDRIEntPriv->hLSAREA;
|
pDRIPriv->hLSAREA = pDRIEntPriv->hLSAREA;
|
||||||
pDRIPriv->pLSAREA = pDRIEntPriv->pLSAREA;
|
pDRIPriv->pLSAREA = pDRIEntPriv->pLSAREA;
|
||||||
|
|
||||||
|
if (!pDRIPriv->pDriverInfo->dontMapFrameBuffer)
|
||||||
|
{
|
||||||
if (drmAddMap( pDRIPriv->drmFD,
|
if (drmAddMap( pDRIPriv->drmFD,
|
||||||
(drm_handle_t)pDRIPriv->pDriverInfo->frameBufferPhysicalAddress,
|
(drm_handle_t)pDRIPriv->pDriverInfo->frameBufferPhysicalAddress,
|
||||||
pDRIPriv->pDriverInfo->frameBufferSize,
|
pDRIPriv->pDriverInfo->frameBufferSize,
|
||||||
DRM_FRAME_BUFFER,
|
DRM_FRAME_BUFFER,
|
||||||
0,
|
0,
|
||||||
&pDRIPriv->hFrameBuffer) < 0)
|
&pDRIPriv->pDriverInfo->hFrameBuffer) < 0)
|
||||||
{
|
{
|
||||||
pDRIPriv->directRenderingSupport = FALSE;
|
pDRIPriv->directRenderingSupport = FALSE;
|
||||||
pScreen->devPrivates[DRIScreenPrivIndex].ptr = NULL;
|
pScreen->devPrivates[DRIScreenPrivIndex].ptr = NULL;
|
||||||
|
@ -432,7 +436,11 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
DRIDrvMsg(pScreen->myNum, X_INFO, "[drm] framebuffer handle = %p\n",
|
DRIDrvMsg(pScreen->myNum, X_INFO, "[drm] framebuffer handle = %p\n",
|
||||||
pDRIPriv->hFrameBuffer);
|
pDRIPriv->pDriverInfo->hFrameBuffer);
|
||||||
|
} else {
|
||||||
|
DRIDrvMsg(pScreen->myNum, X_INFO,
|
||||||
|
"[drm] framebuffer mapped by ddx driver\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (pDRIEntPriv->resOwner == NULL) {
|
if (pDRIEntPriv->resOwner == NULL) {
|
||||||
pDRIEntPriv->resOwner = pScreen;
|
pDRIEntPriv->resOwner = pScreen;
|
||||||
|
@ -479,21 +487,14 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
|
||||||
|
|
||||||
pDRIEntPriv->refCount++;
|
pDRIEntPriv->refCount++;
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bool
|
|
||||||
DRIFinishScreenInit(ScreenPtr pScreen)
|
|
||||||
{
|
|
||||||
DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
|
|
||||||
DRIInfoPtr pDRIInfo = pDRIPriv->pDriverInfo;
|
|
||||||
DRIContextFlags flags = 0;
|
|
||||||
DRIContextPrivPtr pDRIContextPriv;
|
|
||||||
|
|
||||||
/* Set up flags for DRICreateContextPriv */
|
/* Set up flags for DRICreateContextPriv */
|
||||||
switch (pDRIInfo->driverSwapMethod) {
|
switch (pDRIInfo->driverSwapMethod) {
|
||||||
case DRI_KERNEL_SWAP: flags = DRI_CONTEXT_2DONLY; break;
|
case DRI_KERNEL_SWAP:
|
||||||
case DRI_HIDE_X_CONTEXT: flags = DRI_CONTEXT_PRESERVED; break;
|
flags = DRI_CONTEXT_2DONLY;
|
||||||
|
break;
|
||||||
|
case DRI_HIDE_X_CONTEXT:
|
||||||
|
flags = DRI_CONTEXT_PRESERVED;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(pDRIContextPriv = DRICreateContextPriv(pScreen,
|
if (!(pDRIContextPriv = DRICreateContextPriv(pScreen,
|
||||||
|
@ -580,6 +581,15 @@ DRIFinishScreenInit(ScreenPtr pScreen)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
DRIFinishScreenInit(ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
|
||||||
|
DRIInfoPtr pDRIInfo = pDRIPriv->pDriverInfo;
|
||||||
|
|
||||||
/* Wrap DRI support */
|
/* Wrap DRI support */
|
||||||
if (pDRIInfo->wrap.ValidateTree) {
|
if (pDRIInfo->wrap.ValidateTree) {
|
||||||
pDRIPriv->wrap.ValidateTree = pScreen->ValidateTree;
|
pDRIPriv->wrap.ValidateTree = pScreen->ValidateTree;
|
||||||
|
@ -1592,7 +1602,7 @@ DRIGetDeviceInfo(ScreenPtr pScreen,
|
||||||
{
|
{
|
||||||
DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
|
DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
|
||||||
|
|
||||||
*hFrameBuffer = pDRIPriv->hFrameBuffer;
|
*hFrameBuffer = pDRIPriv->pDriverInfo->hFrameBuffer;
|
||||||
*fbOrigin = 0;
|
*fbOrigin = 0;
|
||||||
*fbSize = pDRIPriv->pDriverInfo->frameBufferSize;
|
*fbSize = pDRIPriv->pDriverInfo->frameBufferSize;
|
||||||
*fbStride = pDRIPriv->pDriverInfo->frameBufferStride;
|
*fbStride = pDRIPriv->pDriverInfo->frameBufferStride;
|
||||||
|
|
|
@ -107,7 +107,7 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define DRIINFO_MAJOR_VERSION 5
|
#define DRIINFO_MAJOR_VERSION 5
|
||||||
#define DRIINFO_MINOR_VERSION 3
|
#define DRIINFO_MINOR_VERSION 4
|
||||||
#define DRIINFO_PATCH_VERSION 0
|
#define DRIINFO_PATCH_VERSION 0
|
||||||
|
|
||||||
typedef unsigned long long (*DRITexOffsetStartProcPtr)(PixmapPtr pPix);
|
typedef unsigned long long (*DRITexOffsetStartProcPtr)(PixmapPtr pPix);
|
||||||
|
@ -187,6 +187,12 @@ typedef struct {
|
||||||
/* New with DRI version 5.3.0 */
|
/* New with DRI version 5.3.0 */
|
||||||
DRITexOffsetStartProcPtr texOffsetStart;
|
DRITexOffsetStartProcPtr texOffsetStart;
|
||||||
DRITexOffsetFinishProcPtr texOffsetFinish;
|
DRITexOffsetFinishProcPtr texOffsetFinish;
|
||||||
|
|
||||||
|
/* New with DRI version 5.4.0 */
|
||||||
|
int dontMapFrameBuffer;
|
||||||
|
drm_handle_t hFrameBuffer; /* Handle to framebuffer, either
|
||||||
|
* mapped by DDX driver or DRI */
|
||||||
|
|
||||||
} DRIInfoRec, *DRIInfoPtr;
|
} DRIInfoRec, *DRIInfoPtr;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,6 @@ typedef struct _DRIScreenPrivRec
|
||||||
int drmFD; /* File descriptor for /dev/video/? */
|
int drmFD; /* File descriptor for /dev/video/? */
|
||||||
drm_handle_t hSAREA; /* Handle to SAREA, for mapping */
|
drm_handle_t hSAREA; /* Handle to SAREA, for mapping */
|
||||||
XF86DRISAREAPtr pSAREA; /* Mapped pointer to SAREA */
|
XF86DRISAREAPtr pSAREA; /* Mapped pointer to SAREA */
|
||||||
drm_handle_t hFrameBuffer; /* Handle to framebuffer, for mapping */
|
|
||||||
drm_context_t myContext; /* DDX Driver's context */
|
drm_context_t myContext; /* DDX Driver's context */
|
||||||
DRIContextPrivPtr myContextPriv;/* Pointer to server's private area */
|
DRIContextPrivPtr myContextPriv;/* Pointer to server's private area */
|
||||||
DRIContextPrivPtr lastPartial3DContext; /* last one partially saved */
|
DRIContextPrivPtr lastPartial3DContext; /* last one partially saved */
|
||||||
|
|
Loading…
Reference in New Issue