Merge remote branch 'jamey/for-keith'
Conflicts: hw/xfree86/common/xf86xv.c
This commit is contained in:
		
						commit
						986d46144b
					
				
							
								
								
									
										149
									
								
								Xext/xvdisp.c
								
								
								
								
							
							
						
						
									
										149
									
								
								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