Dual Monitors for Haiku?


#22

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…


#23

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!


#24

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?


#25

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


#26

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.


#27

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.


#29

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…