Lately I've been working on the Gallium3D i965 driver. I had to read up some documentation because, as it turned out, being a "graphics ninja" did not give me intrinsic knowledge of all graphics hardware ever built. I know! I was as shocked as you are right now.
It started with the fact that I wanted to experiment with the layout of vectors in shaders for the code generation using LLVM facilities.
To experiment with different layouts I've decided to write i965 driver for Gallium3D and experiment with LLVM code generation for i965 in that driver. Keith Whitwell and I have been hacking on it and it's going pretty well. It's amazing how much code we've removed from the old i965 driver while porting it to Gallium3D. It was a rather nice feeling to see so much of the complexity of the driver disappear.
The great thing about writing a Gallium3D driver is that a lot of the complexity of the high level API goes away, as it's being moved to "state tracker". State tracker is responsible for all API specific state handling and tricky conversions. The driver never sees the state tracker, it implements a very thin interface, which corresponds rather closely to the way modern hardware works.
One of my favorite changes is the new way we handle state changes. It used to be that the driver had to check whether any of its state changed and if it did upload it before drawing anything. It turned out to be a rather serious bottleneck and it made reading our driver a little painful.
In Gallium3D we went away from that. Now we use similar semantics to what Direct3D10 and OpenGL3 (will) use. Which is that states are largely immutable objects. Their usage follows the
- create from a template
- bind the state to make it active for subsequent rendering calls
- delete when not needed anymore
When I wrote the constant state objects code I ported our simple i915 driver and, even though on i915 we don't have hardware state caching just doing the state conversions in create calls improved the performance in simple examples by about 15fps. For more complicated examples where the state changes are more frequent it will be a lot more. Not even mentioning drivers which will do full state caching in the hardware where this is going to fly like Superman with diarrhea.
Less complexity in the driver and faster code, is what I think love is all about. Granted that my idea of love might be a smidge skewed on account of me being crazy and all but no one can argue with the "simpler/faster" being 'awesome'.
And to really top this graphics talk off, a picture of me naked:
In retrospect not my best day. The lighting was all wrong...
14 comments:
funny post.. I like the writing :)
Moooorree.... graphics.. i mean BRAINNNSS!!!
Most of that is incomprehensible but I like the bit that went
"no one can argue with the "simpler/faster" being 'awesome'"
So all turned out nice again.
I know that "only-visual-presentations-are-interesting" effect all too well ;-)
And that "remove-a-lot-of-code-because-we've-created-a-more-generic-base-system" effect is just awsome. I hope you'll get more of that ...
Neato freakin' cool! Ok, enough of that.
State tracker is a modern woman, she knows her affairs, and boy does she have many, I'm sure! But how far down... er back does she go? You stated that it's good for modern hardware representation, are we talking all the way back to the GeForce 1 era?
And now that you have a test bed, what vector layout fun were you preparing to dive into?
Zack, you look as beautiful as always in your new photo.
However, you mention a 15 frames/s difference for the "simple" test... but how many frames did it render before? To understand how much gain can be had, we need a reference point.
Can't wait to see the final result.
OoooooOooOoo, this is all too sexy!
simpler/faster, ahh. I look forward to the next post! There is always some pure win in them!
@ 1st anonymous: na, he's always like that, gets boring. I mean, he always promisses these naked pictures, but when he does, it's always like 'the lighting sucked' or 'I had a Bad Hair Day'.
Yet he lures us back here with his nice words again and again. Don't listen!
how is Gallium3D different from the Linux drivers stack, how is this going to be more faster? will this stay in user-space? isn't more faster to put all this in the kernel?
can you please explain this so we the users could understand this with some technical details too... thanks
You said about the state tracker: it implements a very thin interface, which corresponds rather closely to the way modern hardware works.
Okay, but what does "modern" means ? Will Gallium3D go the way of the dodo in 5 or 10 years, when current modern hardware is ancient and future modern hardware will be different ?
Please tell me Gallium3D isn't just the API du jour!
Well I don't see hardware changing from the shader+raster ways anytime soon, the next best thing might be fully ray-traced graphics but that takes too much effort for hardware of today. In gallium we trust, make me a wii driver now so I can make games in wii linux kthx.
Zack
I have to read your blog to have any idea what my husband does for a living.
Thanks!
Nicci
Zack -
You seem quite talented for a Polish dude, and you might be of some value to Nokia. Have you heard of a city called Oslo, coz its calling baby
nokia buys qt.. no word from u zakc?!
^^
Post a Comment