On Sun, 2004-01-18 at 09:24, Jonathan Thambidurai wrote:
> 
> Index: programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c
> ===================================================================
> RCS file: /cvs/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c,v
> retrieving revision 1.59
> diff -u -r1.59 radeon_dri.c
> --- programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c      10 Jan 2004 19:03:27 
> -0000      1.59
> +++ programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c      18 Jan 2004 08:00:03 
> -0000
> @@ -165,7 +165,7 @@
>                   pConfigs[i].doubleBuffer   = FALSE;
>               pConfigs[i].stereo             = FALSE;
>               pConfigs[i].bufferSize         = 16;
> -             pConfigs[i].depthSize          = 16;
> +             pConfigs[i].depthSize          = info->depthBpp;
>               if (stencil)
>                   pConfigs[i].stencilSize    = 8;
>               else
> @@ -249,10 +249,10 @@
>               pConfigs[i].stereo             = FALSE;
>               pConfigs[i].bufferSize         = 32;
>               if (stencil) {
> -                 pConfigs[i].depthSize      = 24;
> +                 pConfigs[i].depthSize      = info->depthBpp;
>                   pConfigs[i].stencilSize    = 8;
>               } else {
> -                 pConfigs[i].depthSize      = 24;
> +                 pConfigs[i].depthSize      = info->depthBpp;
>                   pConfigs[i].stencilSize    = 0;
>               }
>               pConfigs[i].auxBuffers         = 0;

Beware that HW stencil buffer is only possible with 24 bit depth buffer;
SW stencil buffer should probably be considered slow?


> @@ -498,7 +498,7 @@
>       }
>       break;
>  
> -    case 32:
> +    case 24:
>       for (x = xstart; x != xend; x += xdir) {
>           for (y = ystart; y != yend; y += ydir) {
>               READ_DEPTH32(d, xa+x, ya+y);
> @@ -1037,15 +1037,15 @@
>      drmInfo.usec_timeout        = info->CPusecTimeout;
>  
>      drmInfo.fb_bpp              = info->CurrentLayout.pixel_code;
> -    drmInfo.depth_bpp           = info->CurrentLayout.pixel_code;
> +    drmInfo.depth_bpp           = (info->depthBpp == 24) ? 32 : 16;
>  
>      drmInfo.front_offset        = info->frontOffset;
>      drmInfo.front_pitch         = info->frontPitch * cpp;
>      drmInfo.back_offset         = info->backOffset;
>      drmInfo.back_pitch          = info->backPitch * cpp;
>      drmInfo.depth_offset        = info->depthOffset;
> -    drmInfo.depth_pitch         = info->depthPitch * cpp;
> -
> +    drmInfo.depth_pitch         = (info->depthBpp == 24) ? 
> +      info->depthPitch * 4 : info->depthPitch * 2;
>      drmInfo.fb_offset           = info->fbHandle;
>      drmInfo.mmio_offset         = info->registerHandle;
>      drmInfo.ring_offset         = info->ringHandle;

[...]

> @@ -4356,6 +4358,31 @@
>                         pScrn->defaultVisual)) return FALSE;
>      miSetPixmapDepths ();
>  
> +    {
> +      int depthBits = 0;
> +
> +      if (info->CurrentLayout.pixel_bytes == 2)
> +     info->depthBpp = 16;
> +      else if (info->CurrentLayout.pixel_bytes == 4)
> +     info->depthBpp = 24;
> +
> +      if (xf86GetOptValInteger(info->Options,
> +                          OPTION_DEPTHBITS, &depthBits))
> +     {
> +       if (depthBits == 16 || depthBits == 24) 
> +       {
> +         xf86DrvMsg (pScrn->scrnIndex, X_CONFIG,
> +                     "Will use %d bit depth buffer\n", depthBits);
> +         info->depthBpp = depthBits;
> +       }
> +     else
> +       {
> +         xf86DrvMsg (pScrn->scrnIndex, X_WARNING,
> +                     "Invalid specifed depth bpp (must be 16 or 24)\n");
> +       }
> +     }
> +    }
> +
>  #ifdef XF86DRI
>                               /* Setup DRI after visuals have been
>                                  established, but before fbScreenInit is
> @@ -4482,6 +4509,18 @@
>       int        l;
>       int        scanlines;
>  
> +
> +
> +     /* account for DepthBits option */
> +     if (info->CurrentLayout.pixel_bytes == 2 && info->depthBpp == 24)
> +       depthSize = ((((pScrn->virtualY+15) & ~15) * width_bytes*2
> +                     + RADEON_BUFFER_ALIGN)
> +                    & ~RADEON_BUFFER_ALIGN);
> +     else if (info->CurrentLayout.pixel_bytes == 4 && info->depthBpp == 16)
> +       depthSize = ((((pScrn->virtualY+15) & ~15) * width_bytes/2
> +                     + RADEON_BUFFER_ALIGN)
> +                    & ~RADEON_BUFFER_ALIGN);
> +
>       info->frontOffset = 0;
>       info->frontPitch = pScrn->displayWidth;
>  

(Why don't you remove the original depthSize assignment?)

If info->depthBpp was set to 32 instead of 24, these changes could be
simplified slightly.


-- 
Earthling Michel DÃnzer      |     Debian (powerpc), X and DRI developer
Libre software enthusiast    |   http://svcs.affero.net/rm.php?r=daenzer



-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
--
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to