[PATCH] added comments

Bernhard Steidl BernhardSteidl at gmx.de
Wed May 30 16:41:41 PDT 2007


- added lots of comments, discussed comments with ahuillet and refined comments
- replaced two constants with MACROs
- no changes to actual code

diff --git a/src/nv_video.c b/src/nv_video.c
index cf4f88d..d9ee700 100644
--- a/src/nv_video.c
+++ b/src/nv_video.c
@@ -25,6 +25,15 @@
 #include "nv_include.h"
 #include "nv_dma.h"
 
+/*
+2046 is the maximum image size in one dimension.
+- why 2046 and not 2048? a hardware filter needs a one pixel bound at every edge
+- in some color spaces w may be rounded up to multiple of 4 and may thus exceed the maximum.
+  What happens then?
+*/
+#define IMAGE_MAX_W 2046
+#define IMAGE_MAX_H 2046
+
 #define OFF_DELAY 	500  /* milliseconds */
 #define FREE_DELAY 	5000
 
@@ -74,7 +83,7 @@ static XF86VideoEncodingRec DummyEncoding =
 { 
 	0,
 	"XV_IMAGE",
-	2046, 2046,
+	IMAGE_MAX_W, IMAGE_MAX_H,
 	{1, 1}
 };
 
@@ -140,6 +149,13 @@ static XF86ImageRec NVImages[NUM_IMAGES_ALL] =
 	XVIMAGE_RGB
 };
 
+/**
+ * NVSetPortDefaults
+ * set attributes of port "pPriv" to complied-in (except for colorKey) defaults
+ * 
+ * @param pScrnInfo screen to get the default colorKey from
+ * @param pPriv port to reset to defaults
+ */
 static void 
 NVSetPortDefaults (ScrnInfoPtr pScrnInfo, NVPortPrivPtr pPriv)
 {
@@ -155,9 +171,12 @@ NVSetPortDefaults (ScrnInfoPtr pScrnInfo, NVPortPrivPtr pPriv)
 	pPriv->iturbt_709		= FALSE;
 }
 
-
+/**
+ * NVResetVideo
+ * writes the current attributes from the overlay port to the hardware
+ */
 void 
-NVResetVideo (ScrnInfoPtr pScrnInfo)
+NVResetVideo(ScrnInfoPtr pScrnInfo)
 {
 	NVPtr          pNv     = NVPTR(pScrnInfo);
 	NVPortPrivPtr  pPriv   = GET_OVERLAY_PRIVATE(pNv);
@@ -184,8 +203,10 @@ NVResetVideo (ScrnInfoPtr pScrnInfo)
 	nvWriteVIDEO(pNv, NV_PVIDEO_COLOR_KEY, pPriv->colorKey);
 }
 
-
-
+/**
+ * NVStopOverlay
+ * Tell the hardware to stop the overlay
+ */
 static void 
 NVStopOverlay (ScrnInfoPtr pScrnInfo)
 {
@@ -194,6 +215,30 @@ NVStopOverlay (ScrnInfoPtr pScrnInfo)
 	nvWriteVIDEO(pNv, NV_PVIDEO_STOP, 1);
 }
 
+/**
+ * NVAllocateOverlayMemory
+ * allocates memory
+ * 
+ * - why does the funciton have "Overlay" in its name? It does not
+ * have anything "Overlay"-specific in its function body and it is called by
+ * non-"Overlay"-specific functions.
+ * TODO: rename to something like NVAllocateVideoMemory or NVAllocateXvMemory
+ * - the function only (re-)allocates memory if it absolutely necessary,
+ * that is, if the requested size is larger than the current size. that means,
+ * that the size of allocated memory never shrinks, even if the requested
+ * does. from a performance point of view this is most likely the best
+ * alternative. but how often does the requested size of memory for video
+ * playback change? whenever video-size/scaling changes? probably not very
+ * often. so maybe sacrifice a tiny bit of performance (whenever the video is
+ * rescaled) and not waste (RAM-)resources?
+ * - the function makes assumptions about the XAA fb manager being used. isn't
+ * there a way to check? what aboaut EXA?
+ * 
+ * @param pScrn screen which requests the memory
+ * @param mem pointer to previously allocated memory for reallocation
+ * @param size size of requested memory segment
+ * @return pointer to the allocated memory
+ */
 static NVAllocRec *
 NVAllocateOverlayMemory(ScrnInfoPtr pScrn, NVAllocRec *mem, int size)
 {
@@ -206,7 +251,7 @@ NVAllocateOverlayMemory(ScrnInfoPtr pScrn, NVAllocRec *mem, int size)
 	size *= (pScrn->bitsPerPixel >> 3);
 
 	if(mem) {
-		if(mem->size >= size) 
+		if(mem->size >= size) // if(mem->size == size)
 			return mem;
 		NVFreeMemory(pNv, mem);
 	}
@@ -214,6 +259,13 @@ NVAllocateOverlayMemory(ScrnInfoPtr pScrn, NVAllocRec *mem, int size)
 	return NVAllocateMemory(pNv, NOUVEAU_MEM_FB, size); /* align 32? */
 }
 
+/**
+ * NVFreeOverlayMemory
+ * frees memory held by the overlay port
+ * this function (unlike NVAllocateOverlayMemory) is "Overlay"-specific
+ * 
+ * @param pScrnInfo screen whose overlay port wants to free memory
+ */
 static void
 NVFreeOverlayMemory(ScrnInfoPtr pScrnInfo)
 {
@@ -226,7 +278,12 @@ NVFreeOverlayMemory(ScrnInfoPtr pScrnInfo)
 	}
 }
 
-
+/**
+ * NVFreeBlitMemory
+ * frees memory held by the blit port
+ * 
+ * @param pScrnInfo screen whose blit port wants to free memory
+ */
 static void
 NVFreeBlitMemory(ScrnInfoPtr pScrnInfo)
 {
@@ -239,6 +296,11 @@ NVFreeBlitMemory(ScrnInfoPtr pScrnInfo)
 	}
 }
 
+/**
+ * NVVideoTimerCallback
+ * callback function which perform cleanup tasks (stop overlay, free memory).
+ * within the driver it is only called once from NVBlockHandler in nv_driver.c
+ */
 static void
 NVVideoTimerCallback(ScrnInfoPtr pScrnInfo, Time currentTime)
 {
@@ -291,6 +353,27 @@ NVVideoTimerCallback(ScrnInfoPtr pScrnInfo, Time currentTime)
 	pNv->VideoTimerCallback = needCallback ? NVVideoTimerCallback : NULL;
 }
 
+/**
+ * NVPutOverlayImage
+ * program hardware to overlay image into front buffer
+ * 
+ * @param pScrnInfo screen
+ * @param src_offset
+ * @param id colorspace of image
+ * @param src_pitch
+ * @param dstBox
+ * @param x1
+ * @param y1
+ * @param x2
+ * @param y2
+ * @param width
+ * @param height
+ * @param src_w
+ * @param src_h
+ * @param drw_w
+ * @param drw_h
+ * @param clipBoxes
+ */
 static void
 NVPutOverlayImage(ScrnInfoPtr pScrnInfo, int offset, int id,
 		  int dstPitch, BoxPtr dstBox,
@@ -358,6 +441,30 @@ extern Bool exaPixmapIsOffscreen(PixmapPtr p);
 extern void exaMoveInPixmap(PixmapPtr pPixmap);
 #endif
 
+/**
+ * NVPutBlitImage
+ * uses the DMA controller of the GPU to blit
+ * (block transfer) image from an offscreen buffer into
+ * the color buffer
+ * 
+ * @param pScrnInfo screen
+ * @param src_offset
+ * @param id colorspace of image
+ * @param src_pitch
+ * @param dstBox
+ * @param x1
+ * @param y1
+ * @param x2
+ * @param y2
+ * @param width
+ * @param height
+ * @param src_w
+ * @param src_h
+ * @param drw_w
+ * @param drw_h
+ * @param clipBoxes
+ * @param pDraw
+ */
 static void
 NVPutBlitImage(ScrnInfoPtr pScrnInfo, int src_offset, int id,
 	       int src_pitch, BoxPtr dstBox,
@@ -530,11 +637,29 @@ NVStopOverlayVideo(ScrnInfoPtr pScrnInfo, pointer data, Bool Exit)
 	}
 }
 
+/**
+ * NVStopBlitVideo
+ * TODO ?
+ */
 static void
 NVStopBlitVideo(ScrnInfoPtr pScrnInfo, pointer data, Bool Exit)
 {
 }
 
+/**
+ * NVSetOverlayPortAttribute
+ * sets the attribute "attribute" of port "data" to value "value"
+ * calls NVResetVideo(pScrnInfo) to apply changes to hardware
+ * 
+ * @param pScrenInfo
+ * @param attribute attribute to set
+ * @param value value to which attribute is to be set
+ * @param data port from which the attribute is to be set
+ * 
+ * @return Success, if setting is successful
+ * BadValue/BadMatch, if value/attribute are invalid
+ * @see NVResetVideo(ScrnInfoPtr pScrnInfo)
+ */
 static int
 NVSetOverlayPortAttribute(ScrnInfoPtr pScrnInfo, Atom attribute,
 			  INT32 value, pointer data)
@@ -590,7 +715,15 @@ NVSetOverlayPortAttribute(ScrnInfoPtr pScrnInfo, Atom attribute,
 	return Success;
 }
 
-
+/**
+ * NVGetOverlayPortAttribute
+ * 
+ * @param pScrnInfo unused
+ * @param attribute attribute to be read
+ * @param value value of attribute will be stored in this pointer
+ * @param data port from which attribute will be read
+ * @return Success, if queried attribute exists
+ */
 static int
 NVGetOverlayPortAttribute(ScrnInfoPtr pScrnInfo, Atom attribute,
 			  INT32 *value, pointer data)
@@ -619,6 +752,21 @@ NVGetOverlayPortAttribute(ScrnInfoPtr pScrnInfo, Atom attribute,
 	return Success;
 }
 
+/**
+ * NVSetBlitPortAttribute
+ * sets the attribute "attribute" of port "data" to value "value"
+ * supported attributes:
+ * - xvSyncToVBlank (values: 0,1)
+ * - xvSetDefaults (values: NA; SyncToVBlank will be set, if hardware supports it)
+ * 
+ * @param pScrenInfo
+ * @param attribute attribute to set
+ * @param value value to which attribute is to be set
+ * @param data port from which the attribute is to be set
+ * 
+ * @return Success, if setting is successful
+ * BadValue/BadMatch, if value/attribute are invalid
+ */
 static int
 NVSetBlitPortAttribute(ScrnInfoPtr pScrnInfo, Atom attribute,
 		       INT32 value, pointer data)
@@ -639,6 +787,17 @@ NVSetBlitPortAttribute(ScrnInfoPtr pScrnInfo, Atom attribute,
 	return Success;
 }
 
+/**
+ * NVGetBlitPortAttribute
+ * reads the value of attribute "attribute" from port "data" into INT32 "*value"
+ * currently only one attribute supported: xvSyncToVBlank
+ * 
+ * @param pScrnInfo unused
+ * @param attribute attribute to be read
+ * @param value value of attribute will be stored here
+ * @param data port from which attribute will be read
+ * @return Success, if queried attribute exists
+ */
 static int
 NVGetBlitPortAttribute(ScrnInfoPtr pScrnInfo, Atom attribute,
 		       INT32 *value, pointer data)
@@ -654,8 +813,28 @@ NVGetBlitPortAttribute(ScrnInfoPtr pScrnInfo, Atom attribute,
 }
 
 
-/*
+/**
  * QueryBestSize
+ * used by client applications to ask the driver:
+ * how would you actually scale a video of dimensions
+ * vid_w, vid_h, if i wanted you to scale it to dimensions
+ * drw_w, drw_h?
+ * function stores actual scaling size in pointers p_w, p_h.
+ * 
+ * - currently the image cannot be scaled to less than
+ * 1/8th of the original size in either dimension. why?
+ * - what happens if the client requests a scaling to a larger value than
+ * the hardware is capable of (IMAGE_MAX_W, IMAGE_MAX_H)?
+ * 
+ * @param pScrnInfo unused
+ * @param motion unused
+ * @param vid_w width of source video
+ * @param vid_h height of source video
+ * @param drw_w desired scaled width as requested by client
+ * @param drw_h desired scaled height as requested by client
+ * @param p_w actual scaled width as the driver is capable of
+ * @param p_h actual scaled height as the driver is capable of
+ * @param data unused
  */
 static void
 NVQueryBestSize(ScrnInfoPtr pScrnInfo, Bool motion,
@@ -673,6 +852,22 @@ NVQueryBestSize(ScrnInfoPtr pScrnInfo, Bool motion,
 	*p_h = drw_h; 
 }
 
+/**
+ * NVCopyData420
+ * TODO: use DMA instead of CPU copy
+ * used by NVPutImage() function to copy (image)data from
+ * system RAM to VRAM and change data order.
+ * 
+ * @param src1 source buffer (luma ?)
+ * @param src2 source buffer (chroma1 ?)
+ * @param src3 source buffer (chroma2 ?)
+ * @param dst1 destination buffer
+ * @param srcPitch pitch of src1
+ * @param srcPitch2 pitch of src2, src3
+ * @param dstPitch pitch of dst1
+ * @param h number of lines to copy
+ * @param w length of lines to copy
+ */
 static void NVCopyData420(unsigned char *src1, unsigned char *src2,
 			  unsigned char *src3, unsigned char *dst1,
 			  int srcPitch, int srcPitch2,
@@ -690,7 +885,7 @@ static void NVCopyData420(unsigned char *src1, unsigned char *src2,
 		s1 = src1;  s2 = src2;  s3 = src3;
 		i = w;
 
-		while (i > 4) {
+		while (i > 4) { // wouldn't it be better to write (i >= 4) ?
 #if X_BYTE_ORDER == X_BIG_ENDIAN
 		dst[0] = (s1[0] << 24) | (s1[1] << 8) | (s3[0] << 16) | s2[0];
 		dst[1] = (s1[2] << 24) | (s1[3] << 8) | (s3[1] << 16) | s2[1];
@@ -725,7 +920,15 @@ static void NVCopyData420(unsigned char *src1, unsigned char *src2,
 	}
 }
 
-
+/**
+ * NVMoveDWORDS
+ * TODO: use DMA instead of CPU copy
+ * copy "dwords" * 32 bits from "src" to "dest"
+ * 
+ * @param dest destination pointer
+ * @param src source pointer
+ * @param dwords size (32bit units)
+ */
 static void
 NVMoveDWORDS(CARD32* dest, CARD32* src, int dwords)
 {
@@ -753,6 +956,15 @@ NVMoveDWORDS(CARD32* dest, CARD32* src, int dwords)
 }
 
 #if X_BYTE_ORDER == X_BIG_ENDIAN
+/**
+ * NVMoveDWORDSSwapped
+ * TODO: use DMA instead of CPU copy
+ * copy "dwords" * 32 bits from "src" to "dest" on big endian plattforms
+ * 
+ * @param dest destination pointer
+ * @param src source pointer
+ * @param dwords size (32bit units)
+ */
 static void
 NVMoveDWORDSSwapped(CARD32* dest, CARD8* src, int dwords)
 {
@@ -763,6 +975,19 @@ NVMoveDWORDSSwapped(CARD32* dest, CARD8* src, int dwords)
 }
 #endif
 
+/**
+ * NVCopyData422
+ * TODO: use DMA instead of CPU copy
+ * used by NVPutImage() function to copy (image)data from
+ * system RAM to VRAM.
+ * 
+ * @param src source buffer 
+ * @param dst destination buffer
+ * @param srcPitch pitch of src
+ * @param dstPitch pitch of dst
+ * @param h number of lines to copy
+ * @param w length of lines to copy
+ */
 static void
 NVCopyData422(unsigned char *src, unsigned char *dst,
 	      int srcPitch, int dstPitch,
@@ -776,6 +1001,19 @@ NVCopyData422(unsigned char *src, unsigned char *dst,
 	}
 }
 
+/**
+ * NVCopyDataRGB
+ * TODO: use DMA instead of CPU copy
+ * used by NVPutImage() function to copy (image)data from
+ * system RAM to VRAM.
+ * 
+ * @param src source buffer 
+ * @param dst destination buffer
+ * @param srcPitch pitch of src
+ * @param dstPitch pitch of dst
+ * @param h number of lines to copy
+ * @param w length of lines to copy
+ */
 static void
 NVCopyDataRGB(unsigned char *src, unsigned char *dst,
 	      int srcPitch, int dstPitch,
@@ -793,8 +1031,30 @@ NVCopyDataRGB(unsigned char *src, unsigned char *dst,
 }
 
 
-/*
- * PutImage
+/**
+ * NVPutImage
+ * PutImage is "the" important function of the Xv extention.
+ * a client (e.g. video player) calls this function for every
+ * image (of the video) to be displayed. this function then
+ * scales and displays the image.
+ * 
+ * @param pScrnInfo screen which hold the port where the image is put
+ * @param src_x
+ * @param src_y
+ * @param src_w
+ * @param src_h
+ * @param drw_x
+ * @param drw_y
+ * @param drw_w
+ * @param drw_h
+ * @param id colorspace of image
+ * @param buf pointer to buffer containing the source image
+ * @param width
+ * @param height
+ * @param Sync unused
+ * @param clipBoxes
+ * @param data pointer to port 
+ * @param pDraw
  */
 static int
 NVPutImage(ScrnInfoPtr  pScrnInfo, short src_x, short src_y,
@@ -863,7 +1123,10 @@ NVPutImage(ScrnInfoPtr  pScrnInfo, short src_x, short src_y,
 		dstBox.y2 -= pScrnInfo->frameY0;
 	}
 
-	bpp = pScrnInfo->bitsPerPixel >> 3;
+	
+	/* determine required memory size */
+	
+	bpp = pScrnInfo->bitsPerPixel >> 3; // bytes per pixel
 
 	switch(id) {
 	case FOURCC_YV12:
@@ -886,15 +1149,21 @@ NVPutImage(ScrnInfoPtr  pScrnInfo, short src_x, short src_y,
 	default:
 		return BadImplementation;
 	}
+	/* dstPitch = number of bytes (used + padding) per row
+	 * so dstPitch / bpp = number of pixels (used + padding) per row
+	 * so newSize = number of pixels for which we have to allocate RAM */
 	newSize = height * dstPitch / bpp;
 
-	if (pPriv->doubleBuffer)
-		newSize <<= 1;
+	if (pPriv->doubleBuffer) // double buffering ...
+		newSize <<= 1; // ... means double the amount of RAM needed
 
+	/* here we allocate RAM for "newSize" pixels, the function will make
+	 * automatically make this right amount of bytes */
 	pPriv->video_mem = NVAllocateOverlayMemory(pScrnInfo, pPriv->video_mem, 
 							      newSize);
 	if (!pPriv->video_mem)
 		return BadAlloc;
+	/* allocating finished */
 
 	offset = pPriv->video_mem->offset;
 	if (pPriv->doubleBuffer) {
@@ -1004,8 +1273,28 @@ NVPutImage(ScrnInfoPtr  pScrnInfo, short src_x, short src_y,
 
 	return Success;
 }
-/*
+
+/**
  * QueryImageAttributes
+ * 
+ * calculates
+ * - size (memory required to store image),
+ * - pitches,
+ * - offsets
+ * of image
+ * depending on colorspace (id) and dimensions (w,h) of image
+ * values of
+ * - w,
+ * - h
+ * may be adjusted as needed
+ * 
+ * @param pScrnInfo unused
+ * @param id colorspace of image
+ * @param w pointer to width of image
+ * @param h pointer to height of image
+ * @param pitches pitches[i] = length of a scanline in plane[i]
+ * @param offsets offsets[i] = offset of plane i from the beginning of the image
+ * @return size of the memory required for the XvImage queried
  */
 static int
 NVQueryImageAttributes(ScrnInfoPtr pScrnInfo, int id, 
@@ -1014,46 +1303,46 @@ NVQueryImageAttributes(ScrnInfoPtr pScrnInfo, int id,
 {
 	int size, tmp;
 
-	if (*w > 2046)
-		*w = 2046;
-	if (*h > 2046)
-		*h = 2046;
+	if (*w > IMAGE_MAX_W)
+		*w = IMAGE_MAX_W;
+	if (*h > IMAGE_MAX_H)
+		*h = IMAGE_MAX_H;
 
-	*w = (*w + 1) & ~1;
+	*w = (*w + 1) & ~1; // width rounded up to an even number
 	if (offsets)
 		offsets[0] = 0;
 
 	switch (id) {
 	case FOURCC_YV12:
 	case FOURCC_I420:
-		*h = (*h + 1) & ~1;
-		size = (*w + 3) & ~3;
+		*h = (*h + 1) & ~1; // height rounded up to an even number
+		size = (*w + 3) & ~3; // width rounded up to a multiple of 4
 		if (pitches)
-			pitches[0] = size;
+			pitches[0] = size; // width rounded up to a multiple of 4
 		size *= *h;
 		if (offsets)
-			offsets[1] = size;
-		tmp = ((*w >> 1) + 3) & ~3;
+			offsets[1] = size; // number of pixels in "rounded up" image
+		tmp = ((*w >> 1) + 3) & ~3; // width/2 rounded up to a multiple of 4
 		if (pitches)
-			pitches[1] = pitches[2] = tmp;
-		tmp *= (*h >> 1);
-		size += tmp;
+			pitches[1] = pitches[2] = tmp; // width/2 rounded up to a multiple of 4
+		tmp *= (*h >> 1); // 1/4*number of pixels in "rounded up" image
+		size += tmp; // 5/4*number of pixels in "rounded up" image
 		if (offsets)
-			offsets[2] = size;
-		size += tmp;
+			offsets[2] = size; // 5/4*number of pixels in "rounded up" image
+		size += tmp; // = 3/2*number of pixels in "rounded up" image
 		break;
 	case FOURCC_UYVY:
 	case FOURCC_YUY2:
-		size = *w << 1;
+		size = *w << 1; // 2*width
 		if (pitches)
-			pitches[0] = size;
-		size *= *h;
+			pitches[0] = size; // 2*width
+		size *= *h; // 2*width*height
 		break;
 	case FOURCC_RGB:
-		size = *w << 2;
+		size = *w << 2; // 4*width (32 bit per pixel)
 		if (pitches)
-			pitches[0] = size;
-		size *= *h;
+			pitches[0] = size; // 4*width
+		size *= *h; // 4*width*height
 		break;
 	default:
 		*w = *h = size = 0;
@@ -1080,7 +1369,7 @@ NVAllocSurface(ScrnInfoPtr pScrnInfo, int id,
 	if (pPriv->grabbedByV4L)
 		return BadAlloc;
 
-	if ((w > 2046) || (h > 2046))
+	if ((w > IMAGE_MAX_W) || (h > IMAGE_MAX_H))
 		return BadValue;
 
 	w = (w + 1) & ~1;
@@ -1210,6 +1499,12 @@ NVDisplaySurface(XF86SurfacePtr surface,
 	return Success;
 }
 
+/**
+ * NVSetupBlitVideo
+ * this function does all the work setting up a blit port
+ * 
+ * @return blit port
+ */
 static XF86VideoAdaptorPtr
 NVSetupBlitVideo (ScreenPtr pScreen)
 {
@@ -1272,6 +1567,13 @@ NVSetupBlitVideo (ScreenPtr pScreen)
 	return adapt;
 }
 
+/**
+ * NV10SetupOverlayVideo
+ * this function does all the work setting up an overlay port
+ * 
+ * @return overlay port
+ * @see NVResetVideo(ScrnInfoPtr pScrnInfo)
+ */
 static XF86VideoAdaptorPtr 
 NV10SetupOverlayVideo(ScreenPtr pScreen)
 {
@@ -1351,7 +1653,7 @@ XF86OffscreenImageRec NVOffscreenImages[2] = {
 		NVStopSurface,
 		NVGetSurfaceAttribute,
 		NVSetSurfaceAttribute,
-		2046, 2046,
+		IMAGE_MAX_W, IMAGE_MAX_H,
 		NUM_OVERLAY_ATTRIBUTES - 1,
 		&NVOverlayAttributes[1]
 	},
@@ -1364,7 +1666,7 @@ XF86OffscreenImageRec NVOffscreenImages[2] = {
 		NVStopSurface,
 		NVGetSurfaceAttribute,
 		NVSetSurfaceAttribute,
-		2046, 2046,
+		IMAGE_MAX_W, IMAGE_MAX_H,
 		NUM_OVERLAY_ATTRIBUTES - 1,
 		&NVOverlayAttributes[1]
 	}
@@ -1376,6 +1678,15 @@ NVInitOffscreenImages (ScreenPtr pScreen)
 	xf86XVRegisterOffscreenImages(pScreen, NVOffscreenImages, 2);
 }
 
+/**
+ * NVChipsetHasOverlay
+ * 
+ * newer chips don't support overlay anymore.
+ * overlay feature is emulated via textures.
+ * 
+ * @param pNv 
+ * @return true, if chipset supports overlay
+ */
 static Bool
 NVChipsetHasOverlay(NVPtr pNv)
 {
@@ -1395,6 +1706,16 @@ NVChipsetHasOverlay(NVPtr pNv)
 	return FALSE;
 }
 
+/**
+ * NVSetupOverlayVideo
+ * check if chipset supports Overlay and CompositeExtension is disabled.
+ * if so, setup overlay port
+ * 
+ * @return overlay port
+ * @see NVChipsetHasOverlay(NVPtr pNv)
+ * @see NV10SetupOverlayVideo(ScreenPtr pScreen)
+ * @see NVInitOffscreenImages(ScreenPtr pScreen)
+ */
 static XF86VideoAdaptorPtr
 NVSetupOverlayVideo(ScreenPtr pScreen)
 {
@@ -1423,6 +1744,15 @@ NVSetupOverlayVideo(ScreenPtr pScreen)
 	return overlayAdaptor;
 }
 
+/**
+ * NVInitVideo
+ * tries to initialize one new overlay port and one new blit port
+ * and add them to the list of ports on screen "pScreen".
+ * 
+ * @param pScreen
+ * @see NVSetupOverlayVideo(ScreenPtr pScreen)
+ * @see NVSetupBlitVideo(ScreenPtr pScreen)
+ */
 void NVInitVideo (ScreenPtr pScreen)
 {
 	ScrnInfoPtr          pScrn = xf86Screens[pScreen->myNum];
-- 
1.5.0.7


--Multipart=_Thu__31_May_2007_01_51_20_+0200_VhEFSIFhCBVjMJ8F--


More information about the Nouveau mailing list