thanks,  I got it working.  The working patch against CVS in up on
bugzilla:
http://bugs.xfree86.org/cgi-bin/bugzilla/show_bug.cgi?id=276

Alex

--- Egbert Eich <[EMAIL PROTECTED]> wrote:
> Alex Deucher writes:
>  > I'm working on integrating my radeon mergedfb code with xfree86
> cvs. 
>  > so far it's working, but now I'm trying to integrate the current
> clone
>  > code with the mergedfb clone mode.  so far so good.  I'm trying to
> use
>  > the modes defined for the 1st head as clone modes for the second
> head
>  > in the even that no metamodes are defined in the XF86Config file
>  > (default behavior).  I just can't seem to get it to work!  How do
> you
>  > iterate through a mode list?  It seems to be circular.  I'm
> probably
>  > missing something basic, but my code seems to get stuck in an
> endless
>  > loop.  Here's what I'm trying to do.  The function
>  > RADEONGenerateModeList() normally takes the list of userdefined
>  > "metamodes" (mode combinations for both heads, ie,
> 1024x768-800x600
>  > would be the metamode for 1024x768 on the first head and 800x600
> on the
>  > second) and parses them, then looks up the equivalent modes names
> in
>  > the validated modes for each head and then links them into a
> metamode. 
>  > I have a check at the top to see if metamodes is NULL, if it is
> then it
>  > iterates over the validated modes for head 1 (i) and looks up the
>  > corresponding mode for head 2 (j) based on the name, then sets the
>  > metamode.  What is the best way to iterate through a mode list? 
> Am I
>  > even on the right track here?  shouldn't tempmode->next be NULL at
> the
>  > end of the list?  If not then how do you know how many iterations
> you
>  > need?
> 
> The mode list is a ring. Therefore tempmode->next will never be NULL.
> 
> Why don't you try this?
> 
>  > 
>  >     /* default case if no metamodes specified */
>  >     if (str == NULL) {
>  >            sr = radeonClone;
>        if ((tempmode = i) != NULL) 
>           while (1) {
>  >             /* look up the mode for each head based on the name */
>  >                mode1 = RADEONGetModeFromName(tempmode->name, i);
>  >        mode2 = RADEONGetModeFromName(mode1->name, j);
>  >        if(!mode2) {
>  >            xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
>  >            "Mode: \"%s\" is not a supported mode for CRT2\n",
> mode1->name);
>  >            xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
>  >                "Skipping metamode \"%s\".\n");
>  >            mode1 = NULL;
>  >        } else {
>  >         /* link the modes into a "metamode" */
>  >    result = RADEONCopyModeNLink(pScrn, result, mode1, mode2, sr);
>  >            mode1 = NULL;
>  >            mode2 = NULL;
>  >        }  
>           tempmode = tempmode->next;
>           if (tempmode == i || tempmode == NULL)
>               break;
>  >    }
>  >         return result;
>  >     }
>  > 
>  > 
> 
> Egbert.
> _______________________________________________
> Devel mailing list
> [EMAIL PROTECTED]
> http://XFree86.Org/mailman/listinfo/devel


__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com
_______________________________________________
Devel mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/devel

Reply via email to