Rendered at 10:56:12 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
SillyUsername 16 hours ago [-]
I wrote* a modern Linux driver that supports ultrawide resolutions, higher refresh, and faster performance than the original driver(s) on this cheap HDMI only variant server GPU.
I created it because I wanted my Nvidia GPUs to be compute only, and needed a cheap and small display GPU to run X11. I bought this GPU on AliExpress, after learning it had Linux support. It does, but kernel 5.x series and the sm750 driver in modern Linux only supports the older VGA/DVI variants.
Rather than send it back or throw it away, I decided to vibe code a new driver with new features, to make it usable for day to day desktop use. I've a little bit of a background in low level graphics so also added a cool little magic ordered dither (a pretty good one I think!) I devised myself, called "bbdither", and a few hacks to get 2560x1080 at 75hz on a device only officially documented as capable of up to 1920x1200 at 60hz, and PCI-E 1x speed.
Oh nice. I have a little PCIe/VGA one that I use for truenas and it's a bit flaky but I love that it's basically free from a PCIe perspective (just toss it off _any_ root). These are super useful and there are even m.2 variants.
That one is VGA so I think the original upstream driver should support it.
ramon156 15 hours ago [-]
looks cool, and thanks for being upfront about the LLM-assisted part. It seems like a genuine project with a lot of time put into it!
internet2000 13 hours ago [-]
Title fix proposal: Why vibecoding rocks
spockz 6 hours ago [-]
To be fair, vibe coding is only possible because the models have been trained on the countless open source projects out there. And it could take the original drivers as basis in Linux.
stuaxo 10 hours ago [-]
Nice. Is your vibecoded driver from scratch or does it bring the old driver forward ?
SillyUsername 2 hours ago [-]
Bit of both. It uses the GPL low-level sm750 chip/DDK code from Linux’s old sm750fb driver, but it's not just that framebuffer driver updated. The DRM/KMS architecture, board specific SiI9024 HDMI support, modes, DMA updates, hardware cursor, ultrawide support and custom dither are new.
bigstrat2003 14 hours ago [-]
[flagged]
SillyUsername 13 hours ago [-]
I guess this is trolling, but I've never claimed credit for the traditional coding part.
The unique bits I did do
- Checked the specs for actual hardware limits, DMA and any acceleration
- A magic dither based on my previous (normally coded) older projects (see GitHub)
- Image width "compression" idea with loss reduction using sharpening and a slight aspect change.
- Optimising DMA size chunking for optimal memory transfer.
- A lot of actual manual testing, including sheer reduction, frame rate testing, and multiple resolution and different monitor tests (and I lost one - the HDMI port no longer works on my old Celcus)
Failed experiments with:
- using the onboard secondary controller to bypass the primary controller limitations
- devising a hack that would use the vertical scan horizontally using monitor rotation
- attempting an 8, not 16/32 bit desktop for higher performance (old school technique).
- investigating non hardware hacks for overclocking the onboard chips.
- fixing a KVM issue, that required multiple physical disconnects and reconnects to replicate, and a significant amount of weekend time.
So yeah, vibe coded, because I'd never have been able to try these ideas in such a short timescale if I hadn't.
ChickeNES 14 hours ago [-]
Don't you people have something better to do than hound people for their choice of tools?
Brian_K_White 14 hours ago [-]
That's a thing that happens, but this doesn't look like that.
The words "I vibe coded this" explicitly disclaim any excess credit.
They did exactly what anyone can reasonably ask for. They exhibited essentially perfect integrity.
exe34 13 hours ago [-]
I'm assuming your gotcha is going to be "but that's not vibe-coding", but in case you're sincere, you might not have realised this yet: there's a whole range between writing every line by yourself and letting the slop machine create the entire thing. You can rely on your knowledge and understanding to guide it, to the point that it writes code that you would have written, but saves you an enormous amount of time and effort looking up things and creating/running small tests to figure out details. It's a tool, not a spell, so your pearl clutching is a few years out of date...
userbinator 15 hours ago [-]
A GPU with HDMI and 16MB of VRAM is a very strange combination.
wtallis 15 hours ago [-]
It doesn't really do much in the way of processing (https://www.siliconmotion.com/download/3PS/a/SM750_PB_EN_201...); it's pretty much just a dumb framebuffer. You can wire it up to output over an HDMI connector, but with the features it supports you're really just getting a single-link DVI signal.
SillyUsername 14 hours ago [-]
It is just an old school 2D style card, with some (shape) primitives acceleration (unused), two logical controllers (no idea why), but has DMA (used) and a hardware cursor (also used). There's no onboard audio either.
It's pretty much a GPU for rack mount servers that require occasional log in.
It's exactly what I was looking for desktop work, it runs cinnamon fairly well, and won't clash with my Nvidia setup :)
userbinator 14 hours ago [-]
two logical controllers (no idea why)
For dual-monitor versions?
SillyUsername 14 hours ago [-]
Yes. Stupid comment of mine tbh, I saw it as pointless for this card, but they wouldn't make a separate version of the controller just for this
One avenue I looked at for a real 2560px width was that the second controller was physically independent and could have different hardware limits of the first controller by virtue of supporting DVI directly (but not being physically connected to another port).
Unfortunately other controller is logical so that was a bust.
SillyUsername 15 hours ago [-]
I agree but these things are only about $25 USD.
Arguably an older Nvidia GPU is a better investment at this price if you just want basic desktop use. Unfortunately if I did that, the old Nvidia drivers wouldn't support my newer Nvidia Blackwell hardware.
theokrueger 15 hours ago [-]
old nvidia cards are pretty terrible actually on linux due to the proprietary drivers not working on mainline kernel after ~6.6
userbinator 14 hours ago [-]
Maybe an LLM can also assist with modifying the Nvidia driver appropriately.
SillyUsername 14 hours ago [-]
[dead]
pdpi 14 hours ago [-]
16 * 1024 * 1024 / 1920 / 1080 = 8.0909, so you have enough VRAM for double-buffered 24-bit 1080p, with a bit to spare. For pure software rendering, that's good enough!
userbinator 14 hours ago [-]
It's the HDMI output that's the oddity; mid-90s cards with that much (little?) VRAM could already do 2048x1536x32, but usually had a VGA connector.
pdpi 13 hours ago [-]
Yeah, I could've been clearer.
VGA displays are something of a dying breed, and HDMI is the single likeliest interface you might find on a random newish display, so there is a market for absolute cheapest, most basic HDMI output device you can make. If you're going to build that interface, 1080p is the resolution you need to target. My point was simply that 16MB is just barely enough to build that interface, and barely enough is still enough.
numpad0 12 hours ago [-]
datacenter guys didn't like digitals. they embrace blurry SVGA pictures coming through excessively long cables and sometimes mechanical switches, and to them DVI/HDMI felt to be an all-or-nothing risk factor
avhception 25 minutes ago [-]
It's a chicken-and-egg problem. Server hardware comes with VGA, because everything in the server room (think KVM switches, external remote KVM, local 19" consoles) is built with VGA. And that will be the case as long as server hardware comes with VGA.
numpad0 14 hours ago [-]
3840 x 2160[px] x 24[bit/px] / 8[bit/byte] = 24883200[bytes]
^ / 1024^2[bytes/MB] = 23.73[MB]
SillyUsername 14 hours ago [-]
[dead]
arjie 13 hours ago [-]
Hey, how did you iterate on it? Quite interested in your process here considering you say it’s vibe coded. The iteration loop is crucial for that.
SillyUsername 12 hours ago [-]
Initially I just needed a driver for the device.
tldr; had Qwen orchestrate, do admin and assist with investigations, builds and debugging when codex was unavailable. Codex had a dedicated test physical machine, and I promoted the driver it created to the actual target (production) machine when it was stable enough. Used syncthing to keep the code synced between the different environments, with Qwen sending me progress updates on Telegram and querying Codex periodically.
Long answer:
1) Ran the concept and investigation past Qwen 3.6, I wanted a card that would fit my spare PCIe 3 X1 socket (faster cards in other sockets). Identified the sm750, and read up on its capabilities.
2) Due to speed and Qwen 3.6's capability, I handed Codex (on high) a whole physical scrap machine / fresh Mint install, with root access and the GPU directly connected and asked it what was needed. Syncthing copied the work folder to my machine desktop for visibility to my main orchestrating Qwen AI. Qwen could also ssh to the Codex owned machine to check progress and send me Telegram messages when any milestones were passed, as well as issues that might need me there.
3) I Identified all the chips on the sm750, whilst it was trying the official older sm750 drivers (attempting to get a HDMI signal) and gave them to it.
4) Used /plan mode to set the first iteration expectations, no DRM/integration into the control panel, modifying a checked out fbdev low level FB to test my magic dither algorithm (this can only be used for test, the integration needs to go elsewhere in the stack typically).
5) Left it a few hours, came back to see colour bars (success!)
6) Asked it to do the basic plumbing for X11, wondered how far I could push the frequencies past the VESA standards, fried the HDMI TV attempting high frequency modes (only realised next day I'd done this after the TV refused to activate that connector)
7) Plugged the card directly into the machine it would be used in, and the actual ultrawide monitor. Resumed the codex session on that machine, when daily limits were hit used Qwen 3.6/3.8 to package up builds, look for solutions to issues I was hitting. At this point the hardware is my "production" system, so effectively I've promoted test to staging.
8) From here I manually iterated with Codex by having it create scripts that would build the module for the current kernel to restart X11 with 1-3 ideas / fixes at a time.
9) In parallel, used Qwen to prep the GitHub project, Codex and Qwen to do research for ideas on how to overclock the chips, feasibility of hacks I wanted investigating
10) Asked Codex and Qwen to identify bugs Vs specs, it found a few in event sequencing, resuming events, wrong bits in packets etc.
11) Switched Codex to Max after the the bugs were fixed because the driver performance was laggy, and recommendations from Qwen and Codex Medium/High for optimisations either caused degradations in some way (e.g. DMA was slower) and asked it to audit and optimise the code. I did this over 3 nights due to credit limits getting hit, again 1 to 3 changes at a time.
12) After I was happy with the quality ran the licencing checks again past Qwen and Codex and set up the project on GitHub, held private until I got workflows working.
arjie 9 hours ago [-]
Excellent setup and I think your write up would be pretty good.
EdwardDiego 3 hours ago [-]
NGL, I read the title initially as Why open source rocks? - a new SM750 (Silicon Motion GPU) HDMI Driver
And got excited that you were open sourcing a chip.
sabot90260 11 hours ago [-]
Proprietary drivers for obscure hardware were the bane of my existence. Glad to see this SM750 driver open-sourced.
marcodiego 12 hours ago [-]
Hmmm... How about adding it to the Free Software Foundation's "respects your freedom" hardware list?
eggsome 12 hours ago [-]
What kind of motherboard has no onboard iGPU these days?
torvin92 11 hours ago [-]
Another piece of silicon saved from the landfill! Open source keeps hardware relevant way past its commercial lifecycle.
realusername 16 hours ago [-]
Will you upstream it?
SillyUsername 15 hours ago [-]
Possibly, but in order to be safe for everyone, reviewers may want me to remove features that allow the driver to achieve the non-standard performance. There's a lot of hoops to jump through :)
cromka 14 hours ago [-]
How did they react to it being vibe coded? Were they pragmatic about it, as Linus recently suggested
I have like 4 drivers to upstream myself, plus a couple of patches here and there. Quality is good and they're tested, and while I understand the code and how things work low level, I wouldn't be able to write them myself.
SillyUsername 14 hours ago [-]
I've never tried it, I am put off by the amount of work for a few weekends on what I considered a personal project, plus I don't understand the code base well enough (problem domain is ok, I grew up with 8 and 16 Bit machines, and pushing graphics driver boundaries in Amiga and VGA monitor era machines). This is why my readme asks for help with issues :)
The dev on this driver used a combination of local Qwen 3.6 and 3.8 27B for admin and basic work, and extensive Codex 5.6 Sol Max to catch the issues I found and do last stage optimisations / isolate the bugs.
I'll freely admit I relied heavily on AI, my expertise and day job is in other software stacks.
I created it because I wanted my Nvidia GPUs to be compute only, and needed a cheap and small display GPU to run X11. I bought this GPU on AliExpress, after learning it had Linux support. It does, but kernel 5.x series and the sm750 driver in modern Linux only supports the older VGA/DVI variants.
Rather than send it back or throw it away, I decided to vibe code a new driver with new features, to make it usable for day to day desktop use. I've a little bit of a background in low level graphics so also added a cool little magic ordered dither (a pretty good one I think!) I devised myself, called "bbdither", and a few hacks to get 2560x1080 at 75hz on a device only officially documented as capable of up to 1920x1200 at 60hz, and PCI-E 1x speed.
Screenshots here: https://github.com/KodeMunkie/sm750hdmifb#screenshots
If you try it out, be careful - read the project disclaimer :)
*Vibe coded, as mentioned in Hackernews comments here https://news.ycombinator.com/item?id=49415282
That one is VGA so I think the original upstream driver should support it.
The unique bits I did do
- Checked the specs for actual hardware limits, DMA and any acceleration
- A magic dither based on my previous (normally coded) older projects (see GitHub)
- Image width "compression" idea with loss reduction using sharpening and a slight aspect change.
- Optimising DMA size chunking for optimal memory transfer.
- A lot of actual manual testing, including sheer reduction, frame rate testing, and multiple resolution and different monitor tests (and I lost one - the HDMI port no longer works on my old Celcus)
Failed experiments with:
- using the onboard secondary controller to bypass the primary controller limitations
- devising a hack that would use the vertical scan horizontally using monitor rotation
- attempting an 8, not 16/32 bit desktop for higher performance (old school technique).
- investigating non hardware hacks for overclocking the onboard chips.
- fixing a KVM issue, that required multiple physical disconnects and reconnects to replicate, and a significant amount of weekend time.
So yeah, vibe coded, because I'd never have been able to try these ideas in such a short timescale if I hadn't.
The words "I vibe coded this" explicitly disclaim any excess credit.
They did exactly what anyone can reasonably ask for. They exhibited essentially perfect integrity.
For dual-monitor versions?
One avenue I looked at for a real 2560px width was that the second controller was physically independent and could have different hardware limits of the first controller by virtue of supporting DVI directly (but not being physically connected to another port).
Unfortunately other controller is logical so that was a bust.
VGA displays are something of a dying breed, and HDMI is the single likeliest interface you might find on a random newish display, so there is a market for absolute cheapest, most basic HDMI output device you can make. If you're going to build that interface, 1080p is the resolution you need to target. My point was simply that 16MB is just barely enough to build that interface, and barely enough is still enough.
^ / 1024^2[bytes/MB] = 23.73[MB]
tldr; had Qwen orchestrate, do admin and assist with investigations, builds and debugging when codex was unavailable. Codex had a dedicated test physical machine, and I promoted the driver it created to the actual target (production) machine when it was stable enough. Used syncthing to keep the code synced between the different environments, with Qwen sending me progress updates on Telegram and querying Codex periodically.
Long answer:
1) Ran the concept and investigation past Qwen 3.6, I wanted a card that would fit my spare PCIe 3 X1 socket (faster cards in other sockets). Identified the sm750, and read up on its capabilities.
2) Due to speed and Qwen 3.6's capability, I handed Codex (on high) a whole physical scrap machine / fresh Mint install, with root access and the GPU directly connected and asked it what was needed. Syncthing copied the work folder to my machine desktop for visibility to my main orchestrating Qwen AI. Qwen could also ssh to the Codex owned machine to check progress and send me Telegram messages when any milestones were passed, as well as issues that might need me there.
3) I Identified all the chips on the sm750, whilst it was trying the official older sm750 drivers (attempting to get a HDMI signal) and gave them to it.
4) Used /plan mode to set the first iteration expectations, no DRM/integration into the control panel, modifying a checked out fbdev low level FB to test my magic dither algorithm (this can only be used for test, the integration needs to go elsewhere in the stack typically).
5) Left it a few hours, came back to see colour bars (success!)
6) Asked it to do the basic plumbing for X11, wondered how far I could push the frequencies past the VESA standards, fried the HDMI TV attempting high frequency modes (only realised next day I'd done this after the TV refused to activate that connector)
7) Plugged the card directly into the machine it would be used in, and the actual ultrawide monitor. Resumed the codex session on that machine, when daily limits were hit used Qwen 3.6/3.8 to package up builds, look for solutions to issues I was hitting. At this point the hardware is my "production" system, so effectively I've promoted test to staging.
8) From here I manually iterated with Codex by having it create scripts that would build the module for the current kernel to restart X11 with 1-3 ideas / fixes at a time.
9) In parallel, used Qwen to prep the GitHub project, Codex and Qwen to do research for ideas on how to overclock the chips, feasibility of hacks I wanted investigating
10) Asked Codex and Qwen to identify bugs Vs specs, it found a few in event sequencing, resuming events, wrong bits in packets etc.
11) Switched Codex to Max after the the bugs were fixed because the driver performance was laggy, and recommendations from Qwen and Codex Medium/High for optimisations either caused degradations in some way (e.g. DMA was slower) and asked it to audit and optimise the code. I did this over 3 nights due to credit limits getting hit, again 1 to 3 changes at a time.
12) After I was happy with the quality ran the licencing checks again past Qwen and Codex and set up the project on GitHub, held private until I got workflows working.
And got excited that you were open sourcing a chip.
I have like 4 drivers to upstream myself, plus a couple of patches here and there. Quality is good and they're tested, and while I understand the code and how things work low level, I wouldn't be able to write them myself.
The dev on this driver used a combination of local Qwen 3.6 and 3.8 27B for admin and basic work, and extensive Codex 5.6 Sol Max to catch the issues I found and do last stage optimisations / isolate the bugs.
I'll freely admit I relied heavily on AI, my expertise and day job is in other software stacks.
I stand on the back of giants :)