Merge remote branch 'jamey/for-keith'
Conflicts: hw/xfree86/common/xf86xv.c
This commit is contained in:
		
						commit
						986d46144b
					
				
							
								
								
									
										147
									
								
								Xext/xvdisp.c
								
								
								
								
							
							
						
						
									
										147
									
								
								Xext/xvdisp.c
								
								
								
								
							| 
						 | 
					@ -1850,110 +1850,91 @@ XineramaXvPutStill(ClientPtr client)
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static Bool
 | 
				
			||||||
 | 
					isImageAdaptor(XvAdaptorPtr pAdapt)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return (pAdapt->type & XvImageMask) && (pAdapt->nImages > 0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static Bool
 | 
				
			||||||
 | 
					hasOverlay(XvAdaptorPtr pAdapt)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int i;
 | 
				
			||||||
 | 
					    for(i = 0; i < pAdapt->nAttributes; i++)
 | 
				
			||||||
 | 
						if(!strcmp(pAdapt->pAttributes[i].name, "XV_COLORKEY"))
 | 
				
			||||||
 | 
						    return TRUE;
 | 
				
			||||||
 | 
					    return FALSE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static XvAdaptorPtr
 | 
				
			||||||
 | 
					matchAdaptor(ScreenPtr pScreen, XvAdaptorPtr refAdapt, Bool isOverlay)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int i;
 | 
				
			||||||
 | 
					    XvScreenPtr xvsp = dixLookupPrivate(&pScreen->devPrivates, XvGetScreenKey());
 | 
				
			||||||
 | 
					    /* Do not try to go on if xv is not supported on this screen */
 | 
				
			||||||
 | 
					    if(xvsp == NULL)
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* if the adaptor has the same name it's a perfect match */
 | 
				
			||||||
 | 
					    for(i = 0; i < xvsp->nAdaptors; i++) {
 | 
				
			||||||
 | 
						XvAdaptorPtr pAdapt = xvsp->pAdaptors + i;
 | 
				
			||||||
 | 
						if(!strcmp(refAdapt->name, pAdapt->name))
 | 
				
			||||||
 | 
						    return pAdapt;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* otherwise we only look for XvImage adaptors */
 | 
				
			||||||
 | 
					    if(!isImageAdaptor(refAdapt))
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* prefer overlay/overlay non-overlay/non-overlay pairing */
 | 
				
			||||||
 | 
					    for(i = 0; i < xvsp->nAdaptors; i++) {
 | 
				
			||||||
 | 
						XvAdaptorPtr pAdapt = xvsp->pAdaptors + i;
 | 
				
			||||||
 | 
						if(isImageAdaptor(pAdapt) && isOverlay == hasOverlay(pAdapt))
 | 
				
			||||||
 | 
						    return pAdapt;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* but we'll take any XvImage pairing if we can get it */
 | 
				
			||||||
 | 
					    for(i = 0; i < xvsp->nAdaptors; i++) {
 | 
				
			||||||
 | 
						XvAdaptorPtr pAdapt = xvsp->pAdaptors + i;
 | 
				
			||||||
 | 
						if(isImageAdaptor(pAdapt))
 | 
				
			||||||
 | 
						    return pAdapt;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void XineramifyXv(void)
 | 
					void XineramifyXv(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
   ScreenPtr pScreen, screen0 = screenInfo.screens[0];
 | 
					   XvScreenPtr xvsp0 = dixLookupPrivate(&screenInfo.screens[0]->devPrivates, XvGetScreenKey());
 | 
				
			||||||
   XvScreenPtr xvsp0 = (XvScreenPtr)dixLookupPrivate(&screen0->devPrivates,
 | 
					 | 
				
			||||||
						     XvGetScreenKey());
 | 
					 | 
				
			||||||
   XvAdaptorPtr refAdapt, pAdapt;
 | 
					 | 
				
			||||||
   XvAttributePtr pAttr;
 | 
					 | 
				
			||||||
   XvScreenPtr xvsp;
 | 
					 | 
				
			||||||
   Bool isOverlay, hasOverlay;
 | 
					 | 
				
			||||||
   PanoramiXRes *port;
 | 
					 | 
				
			||||||
   XvAdaptorPtr MatchingAdaptors[MAXSCREENS];
 | 
					   XvAdaptorPtr MatchingAdaptors[MAXSCREENS];
 | 
				
			||||||
   int i, j, k, l;
 | 
					   int i, j, k;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   XvXRTPort = CreateNewResourceType(XineramaDeleteResource, "XvXRTPort");
 | 
					   XvXRTPort = CreateNewResourceType(XineramaDeleteResource, "XvXRTPort");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   if (!xvsp0 || !XvXRTPort) return;
 | 
					   if (!xvsp0 || !XvXRTPort) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   for(i = 0; i < xvsp0->nAdaptors; i++) {
 | 
					   for(i = 0; i < xvsp0->nAdaptors; i++) {
 | 
				
			||||||
      refAdapt = xvsp0->pAdaptors + i;
 | 
					      Bool isOverlay;
 | 
				
			||||||
 | 
					      XvAdaptorPtr refAdapt = xvsp0->pAdaptors + i;
 | 
				
			||||||
      bzero(MatchingAdaptors, sizeof(XvAdaptorPtr) * MAXSCREENS);
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      MatchingAdaptors[0] = refAdapt;
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
      if(!(refAdapt->type & XvInputMask)) continue;
 | 
					      if(!(refAdapt->type & XvInputMask)) continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      isOverlay = FALSE;
 | 
					      MatchingAdaptors[0] = refAdapt;
 | 
				
			||||||
      for(j = 0; j < refAdapt->nAttributes; j++) {
 | 
					      isOverlay = hasOverlay(refAdapt);
 | 
				
			||||||
         pAttr = refAdapt->pAttributes + j;
 | 
					      for(j = 1; j < PanoramiXNumScreens; j++)
 | 
				
			||||||
         if(!strcmp(pAttr->name, "XV_COLORKEY")) {
 | 
						 MatchingAdaptors[j] = matchAdaptor(screenInfo.screens[j], refAdapt, isOverlay);
 | 
				
			||||||
	    isOverlay = TRUE;
 | 
					 | 
				
			||||||
	    break;
 | 
					 | 
				
			||||||
	 }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
      for(j = 1; j < PanoramiXNumScreens; j++) {
 | 
					 | 
				
			||||||
         pScreen = screenInfo.screens[j];
 | 
					 | 
				
			||||||
	 xvsp = (XvScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
 | 
					 | 
				
			||||||
					      XvGetScreenKey());
 | 
					 | 
				
			||||||
         /* Do not try to go on if xv is not supported on this screen */
 | 
					 | 
				
			||||||
         if (xvsp==NULL) continue ;
 | 
					 | 
				
			||||||
	 
 | 
					 | 
				
			||||||
         /* if the adaptor has the same name it's a perfect match */
 | 
					 | 
				
			||||||
	 for(k = 0; k < xvsp->nAdaptors; k++) {
 | 
					 | 
				
			||||||
	   pAdapt = xvsp->pAdaptors + k;
 | 
					 | 
				
			||||||
           if(!strcmp(refAdapt->name, pAdapt->name)) {
 | 
					 | 
				
			||||||
	       MatchingAdaptors[j] = pAdapt;
 | 
					 | 
				
			||||||
	       break;
 | 
					 | 
				
			||||||
	   }
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
	 if(MatchingAdaptors[j]) continue; /* found it */
 | 
					 | 
				
			||||||
	 
 | 
					 | 
				
			||||||
	 /* otherwise we only look for XvImage adaptors */
 | 
					 | 
				
			||||||
	 if(!(refAdapt->type & XvImageMask)) continue;
 | 
					 | 
				
			||||||
	 if(refAdapt->nImages <= 0) continue;
 | 
					 | 
				
			||||||
	 
 | 
					 | 
				
			||||||
	 /* prefer overlay/overlay non-overlay/non-overlay pairing */
 | 
					 | 
				
			||||||
	 for(k = 0; k < xvsp->nAdaptors; k++) {
 | 
					 | 
				
			||||||
	    pAdapt = xvsp->pAdaptors + k;
 | 
					 | 
				
			||||||
	    if((pAdapt->type & XvImageMask) && (pAdapt->nImages > 0)) {
 | 
					 | 
				
			||||||
	      hasOverlay = FALSE;
 | 
					 | 
				
			||||||
              for(l = 0; l < pAdapt->nAttributes; l++) {
 | 
					 | 
				
			||||||
	         if(!strcmp(pAdapt->pAttributes[l].name, "XV_COLORKEY")) {
 | 
					 | 
				
			||||||
		   hasOverlay = TRUE;
 | 
					 | 
				
			||||||
		   break;
 | 
					 | 
				
			||||||
		 }
 | 
					 | 
				
			||||||
	      }
 | 
					 | 
				
			||||||
	      if(isOverlay && hasOverlay) {
 | 
					 | 
				
			||||||
	      	 MatchingAdaptors[j] = pAdapt;
 | 
					 | 
				
			||||||
		 break;
 | 
					 | 
				
			||||||
	      }
 | 
					 | 
				
			||||||
              else if(!isOverlay && !hasOverlay) {
 | 
					 | 
				
			||||||
	      	 MatchingAdaptors[j] = pAdapt;
 | 
					 | 
				
			||||||
		 break;
 | 
					 | 
				
			||||||
	      }
 | 
					 | 
				
			||||||
	    }
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
	 
 | 
					 | 
				
			||||||
	 if(MatchingAdaptors[j]) continue; /* found it */
 | 
					 | 
				
			||||||
	 
 | 
					 | 
				
			||||||
	 /* but we'll take any XvImage pairing if we can get it */
 | 
					 | 
				
			||||||
	 	 
 | 
					 | 
				
			||||||
	 for(k = 0; k < xvsp->nAdaptors; k++) {
 | 
					 | 
				
			||||||
	    pAdapt = xvsp->pAdaptors + k;
 | 
					 | 
				
			||||||
	    if((pAdapt->type & XvImageMask) && (pAdapt->nImages > 0)) {
 | 
					 | 
				
			||||||
	      	 MatchingAdaptors[j] = pAdapt;
 | 
					 | 
				
			||||||
		 break;
 | 
					 | 
				
			||||||
	    }
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      /* now create a resource for each port */
 | 
					      /* now create a resource for each port */
 | 
				
			||||||
      for(j = 0; j < refAdapt->nPorts; j++) {
 | 
					      for(j = 0; j < refAdapt->nPorts; j++) {
 | 
				
			||||||
         if(!(port = xalloc(sizeof(PanoramiXRes))))
 | 
						 PanoramiXRes *port = xalloc(sizeof(PanoramiXRes));
 | 
				
			||||||
 | 
						 if(!port)
 | 
				
			||||||
	    break;
 | 
						    break;
 | 
				
			||||||
	 port->info[0].id = MatchingAdaptors[0]->base_id + j;
 | 
					 | 
				
			||||||
	 AddResource(port->info[0].id, XvXRTPort, port);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	 for(k = 1; k < PanoramiXNumScreens; k++) {
 | 
						 for(k = 0; k < PanoramiXNumScreens; k++) {
 | 
				
			||||||
	    if(MatchingAdaptors[k] && (MatchingAdaptors[k]->nPorts > j)) 
 | 
						    if(MatchingAdaptors[k] && (MatchingAdaptors[k]->nPorts > j)) 
 | 
				
			||||||
		port->info[k].id = MatchingAdaptors[k]->base_id + j;
 | 
							port->info[k].id = MatchingAdaptors[k]->base_id + j;
 | 
				
			||||||
	    else
 | 
						    else
 | 
				
			||||||
		port->info[k].id = 0;
 | 
							port->info[k].id = 0;
 | 
				
			||||||
	 } 
 | 
						 } 
 | 
				
			||||||
 | 
						 AddResource(port->info[0].id, XvXRTPort, port);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -77,7 +77,6 @@ from The Open Group.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct
 | 
					typedef struct
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int scrnum;
 | 
					 | 
				
			||||||
    int width;
 | 
					    int width;
 | 
				
			||||||
    int paddedBytesWidth;
 | 
					    int paddedBytesWidth;
 | 
				
			||||||
    int paddedWidth;
 | 
					    int paddedWidth;
 | 
				
			||||||
| 
						 | 
					@ -105,7 +104,15 @@ typedef struct
 | 
				
			||||||
} vfbScreenInfo, *vfbScreenInfoPtr;
 | 
					} vfbScreenInfo, *vfbScreenInfoPtr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int vfbNumScreens;
 | 
					static int vfbNumScreens;
 | 
				
			||||||
static vfbScreenInfo vfbScreens[MAXSCREENS];
 | 
					static vfbScreenInfo *vfbScreens;
 | 
				
			||||||
 | 
					static vfbScreenInfo defaultScreenInfo = {
 | 
				
			||||||
 | 
					    .width  = VFB_DEFAULT_WIDTH,
 | 
				
			||||||
 | 
					    .height = VFB_DEFAULT_HEIGHT,
 | 
				
			||||||
 | 
					    .depth  = VFB_DEFAULT_DEPTH,
 | 
				
			||||||
 | 
					    .blackPixel = VFB_DEFAULT_BLACKPIXEL,
 | 
				
			||||||
 | 
					    .whitePixel = VFB_DEFAULT_WHITEPIXEL,
 | 
				
			||||||
 | 
					    .lineBias = VFB_DEFAULT_LINEBIAS,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
static Bool vfbPixmapDepths[33];
 | 
					static Bool vfbPixmapDepths[33];
 | 
				
			||||||
#ifdef HAS_MMAP
 | 
					#ifdef HAS_MMAP
 | 
				
			||||||
static char *pfbdir = NULL;
 | 
					static char *pfbdir = NULL;
 | 
				
			||||||
| 
						 | 
					@ -113,7 +120,6 @@ static char *pfbdir = NULL;
 | 
				
			||||||
typedef enum { NORMAL_MEMORY_FB, SHARED_MEMORY_FB, MMAPPED_FILE_FB } fbMemType;
 | 
					typedef enum { NORMAL_MEMORY_FB, SHARED_MEMORY_FB, MMAPPED_FILE_FB } fbMemType;
 | 
				
			||||||
static fbMemType fbmemtype = NORMAL_MEMORY_FB;
 | 
					static fbMemType fbmemtype = NORMAL_MEMORY_FB;
 | 
				
			||||||
static char needswap = 0;
 | 
					static char needswap = 0;
 | 
				
			||||||
static int lastScreen = -1;
 | 
					 | 
				
			||||||
static Bool Render = TRUE;
 | 
					static Bool Render = TRUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define swapcopy16(_dst, _src) \
 | 
					#define swapcopy16(_dst, _src) \
 | 
				
			||||||
| 
						 | 
					@ -134,25 +140,6 @@ vfbInitializePixmapDepths(void)
 | 
				
			||||||
	vfbPixmapDepths[i] = FALSE;
 | 
						vfbPixmapDepths[i] = FALSE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
vfbInitializeDefaultScreens(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    int i;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for (i = 0; i < MAXSCREENS; i++)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
	vfbScreens[i].scrnum = i;
 | 
					 | 
				
			||||||
	vfbScreens[i].width  = VFB_DEFAULT_WIDTH;
 | 
					 | 
				
			||||||
	vfbScreens[i].height = VFB_DEFAULT_HEIGHT;
 | 
					 | 
				
			||||||
	vfbScreens[i].depth  = VFB_DEFAULT_DEPTH;
 | 
					 | 
				
			||||||
	vfbScreens[i].blackPixel = VFB_DEFAULT_BLACKPIXEL;
 | 
					 | 
				
			||||||
	vfbScreens[i].whitePixel = VFB_DEFAULT_WHITEPIXEL;
 | 
					 | 
				
			||||||
	vfbScreens[i].lineBias = VFB_DEFAULT_LINEBIAS;
 | 
					 | 
				
			||||||
	vfbScreens[i].pfbMemory = NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    vfbNumScreens = 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
vfbBitsPerPixel(int depth)
 | 
					vfbBitsPerPixel(int depth)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -267,14 +254,20 @@ int
 | 
				
			||||||
ddxProcessArgument(int argc, char *argv[], int i)
 | 
					ddxProcessArgument(int argc, char *argv[], int i)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static Bool firstTime = TRUE;
 | 
					    static Bool firstTime = TRUE;
 | 
				
			||||||
 | 
					    static int lastScreen = -1;
 | 
				
			||||||
 | 
					    vfbScreenInfo *currentScreen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (firstTime)
 | 
					    if (firstTime)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
	vfbInitializeDefaultScreens();
 | 
					 | 
				
			||||||
	vfbInitializePixmapDepths();
 | 
						vfbInitializePixmapDepths();
 | 
				
			||||||
        firstTime = FALSE;
 | 
					        firstTime = FALSE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (lastScreen == -1)
 | 
				
			||||||
 | 
						currentScreen = &defaultScreenInfo;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
						currentScreen = &vfbScreens[lastScreen];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CHECK_FOR_REQUIRED_ARGUMENTS(num) \
 | 
					#define CHECK_FOR_REQUIRED_ARGUMENTS(num) \
 | 
				
			||||||
    if (((i + num) >= argc) || (!argv[i + num])) {                      \
 | 
					    if (((i + num) >= argc) || (!argv[i + num])) {                      \
 | 
				
			||||||
      ErrorF("Required argument to %s not specified\n", argv[i]);       \
 | 
					      ErrorF("Required argument to %s not specified\n", argv[i]);       \
 | 
				
			||||||
| 
						 | 
					@ -287,13 +280,23 @@ ddxProcessArgument(int argc, char *argv[], int i)
 | 
				
			||||||
	int screenNum;
 | 
						int screenNum;
 | 
				
			||||||
	CHECK_FOR_REQUIRED_ARGUMENTS(2);
 | 
						CHECK_FOR_REQUIRED_ARGUMENTS(2);
 | 
				
			||||||
	screenNum = atoi(argv[i+1]);
 | 
						screenNum = atoi(argv[i+1]);
 | 
				
			||||||
	if (screenNum < 0 || screenNum >= MAXSCREENS)
 | 
						if (screenNum < 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	    ErrorF("Invalid screen number %d\n", screenNum);
 | 
						    ErrorF("Invalid screen number %d\n", screenNum);
 | 
				
			||||||
	    UseMsg();
 | 
						    UseMsg();
 | 
				
			||||||
	    FatalError("Invalid screen number %d passed to -screen\n",
 | 
						    FatalError("Invalid screen number %d passed to -screen\n",
 | 
				
			||||||
		       screenNum);
 | 
							       screenNum);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (vfbNumScreens <= screenNum)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						    vfbScreens = xrealloc(vfbScreens, sizeof(*vfbScreens) * (screenNum + 1));
 | 
				
			||||||
 | 
						    if (!vfbScreens)
 | 
				
			||||||
 | 
							FatalError("Not enough memory for screen %d\n", screenNum);
 | 
				
			||||||
 | 
						    for (; vfbNumScreens <= screenNum; ++vfbNumScreens)
 | 
				
			||||||
 | 
							vfbScreens[vfbNumScreens] = defaultScreenInfo;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (3 != sscanf(argv[i+2], "%dx%dx%d",
 | 
						if (3 != sscanf(argv[i+2], "%dx%dx%d",
 | 
				
			||||||
			&vfbScreens[screenNum].width,
 | 
								&vfbScreens[screenNum].width,
 | 
				
			||||||
			&vfbScreens[screenNum].height,
 | 
								&vfbScreens[screenNum].height,
 | 
				
			||||||
| 
						 | 
					@ -305,8 +308,6 @@ ddxProcessArgument(int argc, char *argv[], int i)
 | 
				
			||||||
		   argv[i+2], screenNum);
 | 
							   argv[i+2], screenNum);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (screenNum >= vfbNumScreens)
 | 
					 | 
				
			||||||
	    vfbNumScreens = screenNum + 1;
 | 
					 | 
				
			||||||
	lastScreen = screenNum;
 | 
						lastScreen = screenNum;
 | 
				
			||||||
	return 3;
 | 
						return 3;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -348,61 +349,22 @@ ddxProcessArgument(int argc, char *argv[], int i)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (strcmp (argv[i], "-blackpixel") == 0)	/* -blackpixel n */
 | 
					    if (strcmp (argv[i], "-blackpixel") == 0)	/* -blackpixel n */
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
	Pixel pix;
 | 
					 | 
				
			||||||
	CHECK_FOR_REQUIRED_ARGUMENTS(1);
 | 
						CHECK_FOR_REQUIRED_ARGUMENTS(1);
 | 
				
			||||||
	pix = atoi(argv[++i]);
 | 
						currentScreen->blackPixel = atoi(argv[++i]);
 | 
				
			||||||
	if (-1 == lastScreen)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	    int i;
 | 
					 | 
				
			||||||
	    for (i = 0; i < MAXSCREENS; i++)
 | 
					 | 
				
			||||||
	    {
 | 
					 | 
				
			||||||
		vfbScreens[i].blackPixel = pix;
 | 
					 | 
				
			||||||
	    }
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	    vfbScreens[lastScreen].blackPixel = pix;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return 2;
 | 
						return 2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (strcmp (argv[i], "-whitepixel") == 0)	/* -whitepixel n */
 | 
					    if (strcmp (argv[i], "-whitepixel") == 0)	/* -whitepixel n */
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
	Pixel pix;
 | 
					 | 
				
			||||||
	CHECK_FOR_REQUIRED_ARGUMENTS(1);
 | 
						CHECK_FOR_REQUIRED_ARGUMENTS(1);
 | 
				
			||||||
	pix = atoi(argv[++i]);
 | 
						currentScreen->whitePixel = atoi(argv[++i]);
 | 
				
			||||||
	if (-1 == lastScreen)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	    int i;
 | 
					 | 
				
			||||||
	    for (i = 0; i < MAXSCREENS; i++)
 | 
					 | 
				
			||||||
	    {
 | 
					 | 
				
			||||||
		vfbScreens[i].whitePixel = pix;
 | 
					 | 
				
			||||||
	    }
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	    vfbScreens[lastScreen].whitePixel = pix;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return 2;
 | 
						return 2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (strcmp (argv[i], "-linebias") == 0)	/* -linebias n */
 | 
					    if (strcmp (argv[i], "-linebias") == 0)	/* -linebias n */
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
	unsigned int linebias;
 | 
					 | 
				
			||||||
	CHECK_FOR_REQUIRED_ARGUMENTS(1);
 | 
						CHECK_FOR_REQUIRED_ARGUMENTS(1);
 | 
				
			||||||
	linebias = atoi(argv[++i]);
 | 
						currentScreen->lineBias = atoi(argv[++i]);
 | 
				
			||||||
	if (-1 == lastScreen)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	    int i;
 | 
					 | 
				
			||||||
	    for (i = 0; i < MAXSCREENS; i++)
 | 
					 | 
				
			||||||
	    {
 | 
					 | 
				
			||||||
		vfbScreens[i].lineBias = linebias;
 | 
					 | 
				
			||||||
	    }
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	    vfbScreens[lastScreen].lineBias = linebias;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return 2;
 | 
						return 2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -598,7 +560,7 @@ vfbAllocateMmappedFramebuffer(vfbScreenInfoPtr pvfb)
 | 
				
			||||||
    char dummyBuffer[DUMMY_BUFFER_SIZE];
 | 
					    char dummyBuffer[DUMMY_BUFFER_SIZE];
 | 
				
			||||||
    int currentFileSize, writeThisTime;
 | 
					    int currentFileSize, writeThisTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sprintf(pvfb->mmap_file, "%s/Xvfb_screen%d", pfbdir, pvfb->scrnum);
 | 
					    sprintf(pvfb->mmap_file, "%s/Xvfb_screen%d", pfbdir, (int) (pvfb - vfbScreens));
 | 
				
			||||||
    if (-1 == (pvfb->mmap_fd = open(pvfb->mmap_file, O_CREAT|O_RDWR, 0666)))
 | 
					    if (-1 == (pvfb->mmap_fd = open(pvfb->mmap_file, O_CREAT|O_RDWR, 0666)))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
	perror("open");
 | 
						perror("open");
 | 
				
			||||||
| 
						 | 
					@ -671,7 +633,7 @@ vfbAllocateSharedMemoryFramebuffer(vfbScreenInfoPtr pvfb)
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ErrorF("screen %d shmid %d\n", pvfb->scrnum, pvfb->shmid);
 | 
					    ErrorF("screen %d shmid %d\n", (int) (pvfb - vfbScreens), pvfb->shmid);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif /* HAS_SHM */
 | 
					#endif /* HAS_SHM */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -995,6 +957,11 @@ InitOutput(ScreenInfo *screenInfo, int argc, char **argv)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* initialize screens */
 | 
					    /* initialize screens */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (vfbNumScreens < 1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
						vfbScreens = &defaultScreenInfo;
 | 
				
			||||||
 | 
						vfbNumScreens = 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    for (i = 0; i < vfbNumScreens; i++)
 | 
					    for (i = 0; i < vfbNumScreens; i++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
	if (-1 == AddScreen(vfbScreenInit, argc, argv))
 | 
						if (-1 == AddScreen(vfbScreenInit, argc, argv))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -197,6 +197,9 @@ xf86XVRegisterOffscreenImages(
 | 
				
			||||||
    int num
 | 
					    int num
 | 
				
			||||||
){
 | 
					){
 | 
				
			||||||
    OffscreenImageRec *OffscreenImage;
 | 
					    OffscreenImageRec *OffscreenImage;
 | 
				
			||||||
 | 
					    /* This function may be called before xf86XVScreenInit, so there's
 | 
				
			||||||
 | 
					     * no better place than this to call dixRequestPrivate to ensure we
 | 
				
			||||||
 | 
					     * have space reserved. After the first call it is a no-op. */
 | 
				
			||||||
    if(!dixRequestPrivate(OffscreenPrivateKey, sizeof(OffscreenImageRec)) ||
 | 
					    if(!dixRequestPrivate(OffscreenPrivateKey, sizeof(OffscreenImageRec)) ||
 | 
				
			||||||
       !(OffscreenImage = GetOffscreenImage(pScreen)))
 | 
					       !(OffscreenImage = GetOffscreenImage(pScreen)))
 | 
				
			||||||
        /* Every X.org driver assumes this function always succeeds, so
 | 
					        /* Every X.org driver assumes this function always succeeds, so
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue