optimze for bitblt dib32bpp.c
NOTSRCERASE, DSTINVERT
you can gain more speed from these
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c

Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c
--- trunk/reactos/subsys/win32k/dib/dib32bpp.c	2005-06-03 18:33:15 UTC (rev 15755)
+++ trunk/reactos/subsys/win32k/dib/dib32bpp.c	2005-06-03 18:57:53 UTC (rev 15756)
@@ -387,30 +387,36 @@
 				case BMF_16BPP:
 				case BMF_24BPP:
 				{
-					PBYTE byteaddr = BltInfo->SourceSurface->pvScan0 + BltInfo->DestRect.top * BltInfo->SourceSurface->lDelta;
-                    PDWORD addr = (PDWORD)byteaddr + BltInfo->DestRect.left;
-					LONG  xlDelta =  BltInfo->SourceSurface->lDelta - (BltInfo->DestRect.right - BltInfo->DestRect.left) ;
+					/* calc dest start position */
+					PBYTE Destbyteaddr = BltInfo->SourceSurface->pvScan0 + BltInfo->DestRect.top * BltInfo->SourceSurface->lDelta;
+                    PDWORD Destaddr = (PDWORD)Destbyteaddr + BltInfo->DestRect.left;
+					LONG  DestxlDelta =  BltInfo->SourceSurface->lDelta - (BltInfo->DestRect.right - BltInfo->DestRect.left) ;
 
+					/* calc src start position */
+
 					 SourceY = BltInfo->SourcePoint.y;					 
 					 					 
 					 for (DestY=BltInfo->DestRect.top; DestY<BltInfo->DestRect.bottom; DestY++)
 			         {  
 					   					 
-				      if (SourceY > BltInfo->SourceSurface->sizlBitmap.cy) break;
+						if (SourceY > BltInfo->SourceSurface->sizlBitmap.cy) break;
                  	  
-					  SourceX = BltInfo->SourcePoint.x;
+						SourceX = BltInfo->SourcePoint.x;
 
-				      for (DestX=BltInfo->DestRect.left; DestX<BltInfo->DestRect.right; DestX++, SourceX++, addr++)				
-					  {																														
+						for (DestX=BltInfo->DestRect.left; DestX<BltInfo->DestRect.right; DestX++, SourceX++, Destaddr++)				
+						{																														
 						   if (SourceX > BltInfo->SourceSurface->sizlBitmap.cx) break;														
 					                    										  
-								*addr = DIB_GetSource(BltInfo->SourceSurface,  SourceX, 
+								*Destaddr = DIB_GetSource(BltInfo->SourceSurface,  SourceX, 
 												      SourceY, BltInfo->XlateSourceToDest);										
-							}						
+						 }	
+					  Destaddr+=DestxlDelta;
 					  } 
-					 addr+=xlDelta;
+                 return TRUE;					 
+				 break;
 				}
-				break;
+				
+
 				case BMF_32BPP:
 				{
 					INT Destdelta;
@@ -449,16 +455,78 @@
 						}
 						while (--DesmaxY);
 					}
-					return TRUE;
-					break;
+				 return TRUE;	
+				 break;
 				}
-				
+								
+				default:
+				break;
+			   }
 
+		 break;	
+         case ROP4_DSTINVERT:   
+			 // return(~Dest);
+			 {
+			  /* calc dest start position */
+			  PBYTE Destbyteaddr = BltInfo->SourceSurface->pvScan0 + BltInfo->DestRect.top * BltInfo->SourceSurface->lDelta;
+              PDWORD Destaddr = (PDWORD)Destbyteaddr + BltInfo->DestRect.left;
+			  LONG  DestxlDelta =  BltInfo->SourceSurface->lDelta - (BltInfo->DestRect.right - BltInfo->DestRect.left) ;				
+					 					 					 
+			  for (DestY=BltInfo->DestRect.top; DestY<BltInfo->DestRect.bottom; DestY++)
+			  {  					   					 					                 	  						
+					for (DestX=BltInfo->DestRect.left; DestX<BltInfo->DestRect.right; DestX++, Destaddr++)				
+					{																																			                    										  
+					  *Destaddr = ~(*Destaddr);
+					 }	
+					  Destaddr+=DestxlDelta;
+                } 
+                 return TRUE;					 				
+				}
+		 break;	
+
+         case ROP4_NOTSRCERASE: 
+			 // return(~(Dest | Source));
+			  switch (BltInfo->SourceSurface->iBitmapFormat)
+			  {			   
+			    case BMF_1BPP:
+				case BMF_4BPP:						
+				case BMF_16BPP:
+				case BMF_24BPP:
+				case BMF_32BPP:
+				{
+					/* calc dest start position */
+					PBYTE Destbyteaddr = BltInfo->SourceSurface->pvScan0 + BltInfo->DestRect.top * BltInfo->SourceSurface->lDelta;
+                    PDWORD Destaddr = (PDWORD)Destbyteaddr + BltInfo->DestRect.left;
+					LONG  DestxlDelta =  BltInfo->SourceSurface->lDelta - (BltInfo->DestRect.right - BltInfo->DestRect.left) ;				
+
+					 SourceY = BltInfo->SourcePoint.y;					 
+					 					 
+					 for (DestY=BltInfo->DestRect.top; DestY<BltInfo->DestRect.bottom; DestY++)
+			         {  
+					   					 
+						if (SourceY > BltInfo->SourceSurface->sizlBitmap.cy) break;
+                 	  
+						SourceX = BltInfo->SourcePoint.x;
+
+						for (DestX=BltInfo->DestRect.left; DestX<BltInfo->DestRect.right; DestX++, SourceX++, Destaddr++)				
+						{																														
+						   if (SourceX > BltInfo->SourceSurface->sizlBitmap.cx) break;														
+					                    										  
+								*Destaddr = ~(*Destaddr | DIB_GetSource(BltInfo->SourceSurface,  SourceX, 
+												      SourceY, BltInfo->XlateSourceToDest));										
+						 }	
+					  Destaddr+=DestxlDelta;
+					  } 
+                 return TRUE;					 
+				 break;				
+																				
 				default:
 				break;
 			   }
-		 break;
+			  }
+         break;
 
+				
 		 default:
 		 break;
          }