I’m back to this topic because I want to share some of my recent experience evolving this piece of code.
Lately I spent some time coding something that can be useful for me and maybe for others in Haiku, like an encrypted keystore server for B_PASSWORD_KEYs, an AI subsystem that can work as a MCP (capable of working with local contexts and switching from different kinds of LLMs without losing the context), some basic drivers like a trident blade3d, and lately a basic driver for my Intel Alchemist A380 card. Right now it works in hdmi to max 1920x1080 (or little more) and DisplayPort which can push the resolution to 3840x2160 (that’s the monitor I bought to test the driver). The latter could be achieved only by inheriting the training done by the Card’s firmware at boot. But as the intel datasheet says “the card will start always at the maximum lanes available”; thus, allowing the accelerant to not perform a dplink retraining, which I tried and failed badly 
Anyway as for all of my drivers it seems I’m missing something maybe with v_blank or at interrupt level because teapots doesn’t spin anymore! (please if any of you capable devs wanna help you’ll make me happy like a puppy)
but then I came back to this card the SM750 which gives me joy for its simplicity and due to its datasheet being so easy to read.
My latest work touched 3 topics:
-
the overlay. As wrongly stated before this card has indeed color keying, the fact is that the overlay layer stay on top of the graphics plane, instead of under. So, even though the Primary graphics layer (the one I use for hdmi output) has indeed the color keying, it is unuseful because this is used to let a lower video plane to pass through the color key of the Primary graphics. I implemented it, as it should be done, but here I have a layer z-order issue.
-
having a new monitor gave me the chanche to test this driver on bigger resolutions.
and tadaaaa: wecome new issues! 
when setting a resolution higher than 1280x1024 I experenced something new and exciting: the resolution changed correctly, but the graphic plane not! this means that the hardware changed the pll correctly and set the correct resolution, pitch, etc. but the graphic plane would not go farther thant a specific resolution. I digged in the datasheet and realized I missed to set up some registers, which obviously was set-up at boot time. After changing those regs now the full screen is populated (no black bands) but I experience a repeated image of the desktop instead of drawing the entire desktop like this:
It’s obvious I’m still missing something…
-
Last time, I suspended this project keeping in mind I could implement the hardware cursors using the ALPHA layer, which is available only on the primary graphics path (the one I use for HDMI cards).
This is usefull because I can use high-color cursor while using alpha channel.
In the meantime I can avoid using my workaround, implemented in app_server to fallback to software-cursor for drag’n’drop.
This was quite quirky, because while the implementation has been quite straightforward, some artifacts happened and took me few days to understand how to solve them. At the beginning I thought I was not clearing the last lines:
so I reworked the image loading, the VRAM clearing, since I realized that I should crop the image in “move_cursor” too… Idiot me… At the beginning I reserved a 16KB VRAM (doubling the 64x64*2 size of the 16bit cursor) for this special kind of cursor (if enabled by sm750.settings file) and the B_SET_CURSOR_BITMAP and B_MOVE_CURSOR cropped the image at 63x63 to avoid the last lines. But I realized that after moving around the mouse, the artifact appeared again if the movement was fast enough (just for few ms but it was visible). So empirically I resized down the crop size and I found out that 48x48 was an acceptable trade-off for dragging icons and not showing artifacts. Hurray I said, until I tried draggin a file from the Tracker. An awful thing, the icon was cropped perfectly alphablended though, but a bigger artifact-frame appeared.
Notice the spots here and there? sometimes those spots are small red-lines and so on…
so I brought the reserver VRAM to 163840 instead of 16384 (covering the size of the artifact (3202562), and clearing it at boot time to ensure transaparency.
Now this is the situation
I am at the same point experenced at the inital alpha-cursor implementation… again an artifact at the last lines… BTW I tried increasing the VRAM to 320x320x2 but getting near the left edge other “moving” artifacts were rendered…

still I have to realize how to render the whole string and icon ( actually the size of the cursor decides the dimention of the rendered dragging region… this is the reason for the cropped Iceweasel-5 shown above… )
no matter, I’ll play around 'till it’s ok.
Thanks for your time. Maybe some update will come in a near future (life permitting).