Artifacts appear on a secondary monitor screen that has 8-bit color depth on a Windows XP-based computer (924329)



The information in this article applies to:

  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition

SYMPTOMS

Consider the following scenario. You use a Microsoft Windows XP-based computer that has multiple monitors. The primary monitor has 32-bit color depth. The secondary monitor has 8-bit color depth. In this scenario, artifacts appear on the secondary monitor screen.

Note This issue occurs when you use video cards that have built-in memory. This issue also occurs when you use video cards that do not have alpha-blending capabilities.

CAUSE

This issue occurs when the video card tries to display animated images that require alpha-blending. Alpha-blending is a process by which underlay data is combined with overlay data to display animated images on the screen. When the video card tries to display the images, the Graphics Device Interface (GDI) transfers the underlay data from the video card memory to the system memory. Then, the GDI uses the system memory to perform the alpha-blending. Finally, the GDI transfers the final image back to the video memory.

The 32-bit to 8-bit color conversion that the GDI uses for alpha-blending does not match the 32-bit to 8-bit color conversion that the video card uses. Therefore, the image data is transferred incorrectly. Then, the video card displays artifacts from the images.

WORKAROUND

Note To temporarily work around this issue, press F5 to update the screen.

To work around this issue, the third-party vendor of the video card driver must change the driver so that the GDI does not perform alpha-blending for the video card. To do this, the third-party vendor must change the DrvAlphaBlend function in the driver code so that the function returns a value of TRUE when 8-bit color depth is used. Additionally, the third-party vendor must make sure that the DrvAlphaBlend function does not call the EngAlphaBlend function when 8-bit color depth is used.

The following code exemplifies how the workaround looks when the image size is 40:
If (ppdev->NumAlphaBlendCall < 2) { 
    ppdev->NumAlphaBlendCall++; 

    if ((ppdev->ulBitCount == 8) &&
        (psoSrc->sizlBitmap.cx == 40) && 
        (psoSrc->sizlBitmap.cy == 40)) { 

        return TRUE; 
    } 
}
Note After you perform the workaround, you must restart the computer whenever the video card dynamically changes the display from 8-bit mode to 32-bit mode. You must also restart the computer whenever the video card dynamically changes the display from 32-bit mode to 8-bit mode.

The third-party products that this article discusses are manufactured by companies that are independent of Microsoft. Microsoft makes no warranty, implied or otherwise, regarding the performance or reliability of these products.

Modification Type:MinorLast Reviewed:9/26/2006
Keywords:kbGDI kbtshoot kbprb KB924329 kbAudITPRO kbAudEndUser kbAudDeveloper