Announcement

Collapse
No announcement yet.

Zaphod mode with the Open Source Driver?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zaphod mode with the Open Source Driver?

    Firstly, sorry if this is covered somewhere and I've missed it.

    Has anyone had success configuring any of the the recent open source ATI drivers for Zaphod (dual independent head) mode?

    If so - any pointers?

  • #2
    Originally posted by daveh View Post
    Firstly, sorry if this is covered somewhere and I've missed it.

    Has anyone had success configuring any of the the recent open source ATI drivers for Zaphod (dual independent head) mode?

    If so - any pointers?
    It was working a while ago, but it hasnt worked in at least 4 months for me. I wish some developers would try to spend some time cleaning up that code and making it work well again. In my opinion it has every benefit over every other multimonitor mode. The only drawback I can think of is that you cant drag a window from one screen to the other, short of that it does everything I want better and simpler.

    Comment


    • #3
      Originally posted by duby229 View Post
      It was working a while ago, but it hasnt worked in at least 4 months for me. I wish some developers would try to spend some time cleaning up that code and making it work well again. In my opinion it has every benefit over every other multimonitor mode. The only drawback I can think of is that you cant drag a window from one screen to the other, short of that it does everything I want better and simpler.
      I totally echo that. It's the one damn thing that's holding me back from switching. I tried it again just now with linux-next-20091202 and the latest from drm-radeon-testing. Still no dice. I have a bug report about it here.

      https://bugs.freedesktop.org/show_bug.cgi?id=24523

      Comment


      • #4
        Hm, for me Zaphod mode is working almost flawlessly on two rv770's (HD4870) with 3 screens. The only bug I encounter sometimes is #25311, but I'm not even sure it's radeon specific ...


        As you ask for pointers ... well, i have two device sections in my xorg.conf ... that's pretty much all I did. I'm running on KMS on a drm-next kernel (about 2 weeks old, 2.6.32-rc8) with VGA Arbitration enabled and recent git DDX (xf86-video-ati).

        You can find my somewhat cluttered xorg.conf here: http://pastebin.com/f5fdad007

        Comment


        • #5
          Originally posted by daveh View Post
          Firstly, sorry if this is covered somewhere and I've missed it.

          Has anyone had success configuring any of the the recent open source ATI drivers for Zaphod (dual independent head) mode?

          If so - any pointers?
          Could you tell something more about this mode?
          Can it be used to start two Xservers for one card or just to separate screens on one Xserver?

          I'm using dual seat with two (R3xx) graphic cards (AGP Radeon 9600 and PCI-E Radeon x300) on two Xservers stared by KDM - everything working perfectly on Kubuntu 9.04 and 9.10 but there's one screen for one card.

          Comment


          • #6
            It's for separate screens on one server. Thinking about how the configuration is laid out, it may work across more than one card but I'm not sure.

            Luzipher, I noticed that bug while replying to this thread and it did get me wondering. I haven't enabled the VGA Arbitration stuff, maybe that's what I need. Otherwise I suspect a bug in the output enumeration of some cards. My bug report gives a rather confusing account of how it seems to mix up the DIN output with my DVI outputs.

            Comment


            • #7
              Hmm seems VGA Abitration is already enabled in the kernel but I think it needs xorg-server-1.7. I've stuck with 1.6 because fglrx doesn't support 1.7 yet and downgrading (if it doesn't work out) would be a total bitch.

              Comment


              • #8
                Originally posted by Chewi View Post
                My bug report gives a rather confusing account of how it seems to mix up the DIN output with my DVI outputs.
                It's not mixing it up, the DIN port is a valid output. This is one of the problems with zaphod, how do you pick which outputs get assigned to which instances of the driver if you have more than two outputs but only two display controllers. There's not a good way.

                Comment


                • #9
                  Just tried with xorg/server-1.7.3 anyway. Still no joy. And downgrading was indeed a total bitch.

                  I didn't notice till I tried it that Luzipher actually has two cards. That's probably why it works for him.

                  Originally posted by agd5f View Post
                  It's not mixing it up, the DIN port is a valid output. This is one of the problems with zaphod, how do you pick which outputs get assigned to which instances of the driver if you have more than two outputs but only two display controllers. There's not a good way.
                  I didn't mean that DIN wasn't a valid output but shouldn't the names you give in xorg.conf be used to determine which outputs you're actually talking about? I have found that the order you specify them in at least seems to make some difference. But even when the log shows that it is correctly matching up each output with each monitor section, it still doesn't work.

                  Comment


                  • #10
                    Originally posted by Chewi View Post
                    I didn't mean that DIN wasn't a valid output but shouldn't the names you give in xorg.conf be used to determine which outputs you're actually talking about? I have found that the order you specify them in at least seems to make some difference. But even when the log shows that it is correctly matching up each output with each monitor section, it still doesn't work.
                    zaphod doesn't work like xrandr. You can't pick arbitrary outputs. The driver just grabs the first two outputs and assigns one to each instance of the driver. If you have more than two outputs the remaining outputs are unavailable with zaphod.

                    Comment


                    • #11
                      Originally posted by agd5f View Post
                      zaphod doesn't work like xrandr. You can't pick arbitrary outputs. The driver just grabs the first two outputs and assigns one to each instance of the driver. If you have more than two outputs the remaining outputs are unavailable with zaphod.
                      Here's a shortened version of my xorg.conf...

                      Code:
                      Section "ServerLayout"
                      	Screen	0	"Screen0" 0 0
                      	Screen		"Screen1" LeftOf "Screen0"
                      EndSection
                      
                      Section "Monitor"
                              Identifier "DIN"
                      EndSection
                      
                      Section "Monitor"
                      	Identifier   "DVI-0"
                      EndSection
                      
                      Section "Monitor"
                      	Identifier   "DVI-1"
                      EndSection
                      
                      Section "Device"
                      	Identifier  "Card0"
                      	Screen 0
                      EndSection
                      
                      Section "Device"
                      	Identifier  "Card1"
                      	Screen 1
                      EndSection
                      
                      Section "Screen"
                      	Identifier "Screen0"
                      	Device "Card0"
                      	Monitor "DVI-0"
                      EndSection
                      
                      Section "Screen"
                      	Identifier "Screen1"
                      	Device "Card1"
                      	Monitor "DVI-1"
                      EndSection
                      Now given that it correctly matches the monitor sections with the actual outputs when put in this order, isn't there enough information here to determine which outputs I want to use? The screen sections each bind a monitor and a device together. If zaphod isn't using this information then why not? If it's simply because no one has fixed it yet then fair enough but you're making it sound like it can't be done with the current syntax?

                      Comment


                      • #12
                        It could be done, but it's not done at the moment. Patches welcome.

                        Comment


                        • #13
                          I finally got around to looking into this myself. I've been working my way through xorg-server's InitOutput and the driver's RADEONPreInit_KMS functions, adding debug statements to get a feel for what's going on.

                          The most interesting thing I discovered is that even though the PreInit function gets called twice, once for each screen, the pScrn pointer actually points to Screen0 both times. This may be a problem with the way that probed screens are matched to the configured screens. I hardcoded the matching to see what would happen and while PreInit did get called on Screen1, it still used the wrong monitors. I now think the problem lies deeper, something to do with the entity lists. I'll try and find out soon.

                          Comment


                          • #14
                            Ahaha! I did it! Really happy right now.

                            I came to realise where the monitors were really being selected. I figured the best way to link the probed monitors to the ones listed in xorg.conf would be to do it by name. I think this is what fglrx does. So instead of relying on zaphod_mask, as was previously the case, the drmmode_output_init function now returns early if pScrn->monitor->id doesn't match the name that's just been generated. Bingo!

                            This does still rely on pScrn ponting to the right screen section so the problem in the above post will also need to be fixed. I still have it hardcoded right now. Once I've figured that part out, I'll send Alex a patch. I'm still not sure exactly how zaphod_mask is supposed to work but he'll know what to do.

                            Comment


                            • #15
                              Originally posted by Chewi View Post
                              The most interesting thing I discovered is that even though the PreInit function gets called twice, once for each screen, the pScrn pointer actually points to Screen0 both times.
                              That's how zaphod works any why it's kind of a PITA to deal with. The driver loads twice for the same device, so each instance has to be aware of the other and make sure not to step on each others feet. It's better with KMS since the drm controls the hw and each instance of the X driver would just request calling into the drm rather than trying to bang the hw itself.

                              Comment

                              Working...
                              X