Dual Monitors for Haiku?

I have a couple of X31 machines and they are great for this. However I thought I’d mention that you said in your blog post that they have intel graphics, but actually they use radeon. AFAIK the haiku intel driver doesn’t support dual head output on any cards.

(Unfortunately many x31 machines suffer from a nasty component failure (http://kuzyatech.com/fixing-an-ibm-thinkpad-x31) and both of mine are currently dead)

[quote=Munchausen][quote=pistooli]

So does the Thinkpad X31

http://development.pistooli.com/?p=237

[/quote]

…However I thought I’d mention that you said in your blog post that they have intel graphics, but actually they use radeon. …[/quote]

True… that was the reason I posted it here… :slight_smile: Sorry for the misinformation…

Where can i check if the dual head are supported? i am in a optimus intel/nvidia right now.

Short answer: it is not. Only some very old drivers (non-HD radeon, maybe Matrox) will handle it.

Long answer: open Screen preferences. If you don’t see a way to select multiple monitors and configure their resolutions there, then your driver does not support it.

Oh and this is a hard thing to make, i am just curious cause i am trying to get one experimental thing to practice my skills there, thats whya i want to know how the multiheade work, i was reading the “randr” for linux but now i am curious about what is managing this, or where to see drivers what work and compare with the not working one… maybe i will not be the person who implement it but certainly i will learn something new in haiku.

Well, one needs to dig into driver development and graphics card programming. In the drivers, there is already some idea of different display devices, but we will just pick one and use it. So the code needs to be completed to handle two or more displays, and then it needs to be wired to the interface used by screen preferences to enumerate displays.

1 Like

Well, one needs to dig into driver development and graphics card programming. In the drivers, there is already some idea of different display devices, but we will just pick one and use it. So the code needs to be completed to handle two or more displays, and then it needs to be wired to the interface used by screen preferences to enumerate displays.

Exactly where can i start to dig, cause i am a little lost there cause dont know where to start.

https://git.haiku-os.org/haiku/tree/src/add-ons/accelerants/radeon/multimon.c looks like a possible place to start with.

I tried one of the old video cards that was thought to support dual monitors but it did not work for me.

I’m looking into supporting the current Matrox driver.

If Matrox, we need the Matrox “Dualhead Setup 0.04” software from the Bebits-related archives for Matrox G200-G550 cards. You’ll need DVI-to-VGA adapters for those cards.

Cards with TV-out port handle:
640x480 and 720x480 for NTSC; 768x576 and 720x576 for PAL (use TV-output adapter cable (composite video and S-video, 1-foot)).

Otherwise:

  • Analog, main display: 2048 x 1536
  • Analog, secondary display: 1600 x 1200

Matrox G550 PCIe cards are abundant on eBay. You’ll want to use the PCIe x16 motherboard slot for card testing. Using the monitors in ‘stretched’ or ‘cloned/mirror’ modes
is through the tool I mentioned (for now).

1 Like

Sad :(, what model was?

Mi tower are dead now, thats why i just slow my haiku intense investigation, this laptop are very awful with your suggestion, and it is just plugged to a acer monitor, the tower was an ati 4300… :confused: :frowning:

I don’t think you need “dualhead setup”. The support is built into our screen preferences already. At least that’s how it works with my good old Radeon 7000.

It took a bit of digging, but I found Rudolph Cornelissen’s drivers pages, I had a vague recollection that he at some point had 3D acceleration somewhat working in haiku with old nvidia cards, but that turned out to be under BeOS. However I think multihead might work. He is also the original author of the matrox and neomagic drivers. If haiku still has a neomagic driver, I wonder if that supports dual monitors…

Guys, good morning from holland,

Yes, I was about to post a link to my site indeed :wink:
You’ll find all the info you need there concerning my drivers.
I wrote the nVidia, Matrox, Neomagic and VIA graphics drivers for BeOS and Haiku.

Dualhead setup’s latest version is 0.05, which I recompiled on Haiku to look better there since 0.04 looked a bit off.

My drivers ‘natively’ support dualhead in a different way the Haiku ‘system’ does it. In the old days there were two guys writing gfx drivers for BeOS: Thomas Kurschel and me. Thomas and I had very long talks on BeGeistert a few times about our work. All in all: he developed a bit other way to do dualhead on BeOS/Haiku than what I have (the origins for my dualhead support type (using some flags) comes from Mark Watson, who originally worked on the Matrox driver before I took over.

So, while my drivers work with a few flags ‘compatible’ with the native Be interface, Thomas came up with a ‘struct’ which had a magic signature (namely his initials :wink: that fed the correct info from the screen prefs to the driver.

In 2016, I updated my nVidia driver to partly incorporate his way of doing things, so these days you can use a part of the dualhead support for my Matrox and nVidia driver using Haiku’s screen prefs. But still, I’d advise to use dualhead setup since it exactly offers what the drivers can do. This includes TVout support and persistant modes over reboots. (which only works partially on my drivers using Haiku’s app).

Which cards can do dualhead with my drivers?
-Matrox G400, 450, 550.
-Nvidia: the list is too long to mention here! Please look at my site for all the details (which can also be found in the haiku repository btw: the docs are there, including a sample settings file for all kinds of tweaking and debugging.).

http://rudolfs-place.nl/BeOS/NVdriver/nvidia.html#features

Oh, 3D support does exist indeed for older nVidia cards. It is a lot better than it was on Linux, though it was partly based on it (UtahGLX). Important difference is that I programmed the hardware to work with DMA while originally it was done with PIO mode.

Info about 3D is also extensively there on these pages.
I expect that if you dump the old libraries in place (MESA), also there, it should still work…

It looks like we now have a decent 3D accelerant proto (soft-renderer) in place on Haiku, so it would be very cool to ‘port’ the old 3D accelerant inside my versions of the MESA lib to this new interface if possible, as a proof of concept so to speak…

Hope this info helps!

6 Likes

Maybe a bit off topic here but I never saw hardware accelerated 3D in action on BeOS. Back in the days the new networking stack + 3D stack was leaked, as well as the dan0 version. What hardware was supported by the 3D stack? What do I need to see working hardware accelerated 3D on BeOS?

Please forgive me for showing you a simple (‘ready’) way to use 2 monitors …

1 Like

Video cards from 2000:

3dfx_voodoo2
3dfx_voodoo3
3dfx_voodoo4
Intel810
Matrox
Radeon

(data taken from ‘accelerants’ folder of opengl drivers install package)
Personaly I had 3dfx_voodoo3 and 3D worked.
Later there was Nvidia cards, that had third party 3D drivers for BeOS.

Here is the state of things. Some of the very old ATI drivers (radeon) support multi-head configurations. This was done via some really, really dirty hacks back in the day. (https://git.haiku-os.org/haiku/tree/src/preferences/screen/multimon.cpp) multimon pretty much sticks some custom flags in the video mode timing flags saying “oh, i’m radeon and support multiple monitors” (which makes no sense from a design standpoint… thus my hack comment :slight_smile: )

App server is the code which manages desktops, displays, etc. While App server does have some idea of multiple “Screens” it doesn’t have an API to manage multiple displays via the accelerant hooks.

So, we have two drivers which should be in-theory “ready” for multiple displays, and we have an app_server which has at least the concept of multiple screens.

What’s left is the app_server needs to get the API’s defined (in a BeOS style) to manage multiple displays, store multiple display configurations, and speak to the accelerant about managing those displays.

Can it be done? Yes. It was on my long-list of projects… but just not enough hours in the day :slight_smile:
I was playing around adding some 3d accelerant hooks last year, but didn’t do much with it. Adding multiple-monitor hooks should be a similar process. https://gitlab.com/kallisti5/haiku/commit/603ef34abdae208337c95ecf063455ccfc556712

Multi-head support is kind of an elephant. The best way to eat it would be to have a branch, play around with designing a series of accelerant hooks, form a system in app_server to manage multiple monitors, design a way to manage those monitors, and maybe tweak https://git.haiku-os.org/haiku/tree/src/bin/screenmode to accept a “screen index”

That would be a bare minimum path to getting started.

4 Likes

I would say that it if someone is going to try this, I would be happy to help.

I started my career a C developer, it was a long time ago and I don’t use C since…well…2008. I’m rusty, but there is still something in the dust left. And recovering my C skills would be useful for my career, actually.

About C++…well…who knows…

Ofc i would not be able to work on this task alone, but if some senior programmers would lead the activity I would be happy ro help to do the annoying stuff and doing my homeworks…

1 Like