Following on from my last campaign: http://www.indiegogo.com/projects/help-improve-opengl-support-for-the-linux-graphics-drivers
Many of my previous backers have asked that I do a follow up campaign to help improve OpenGL on Linux so here it is. Previous backers may remember that I did some investigation into the GL_ARB_arrays_of_arrays extension during my last project: https://github.com/tarceri/mesa-debug/wiki/Day-8 (Please note that the extension turned out to be more work than I thought when I wrote that blog post)
Well I have been doing some work on the extension in my spare time and I have got to a point where running another campaign would result in some real benefit.
My plan is slightly different this time around. I'm only asking for funding for 1 week rather than 2, and my aim (although anything can happen) is not to have a fully finished extension at the end but a good set of piglit tests that will make implementation much easier and to get my existing Mesa work on ARB_arrays_of_arrays into a good enough state to be able to get some feedback from the Mesa dev's. From here I will be in a good enough position to finish the extension in my own time as I suspect feedback for the dev's and revisions to my changes could take weeks, so its not realistic to try to get funding for all this time.
Stretch goal ($3000):
1 Extra week working toward getting the GL_arrays_of_arrays code working, adding more piglit tests, implementing suggested improvements, and exploring other possible extensions to work on in future.
Support me without donating?
For ways you can support me without directly donating money see my blog post here: http://www.itsqueeze.com/2013/12/independent-mesa-developer-alternative-funding-model/
What is Mesa and why should I care?
Mesa is an open-source implementation of the OpenGL specification. OpenGL is a programming library for writing interactive 3D applications such as games.
Mesa is used in Linux as the core for implementing OpenGL on the open source graphics drivers.
Currently OpenGL support in Mesa lags behind proprietary drivers such as those found on Windows, this is something I'm trying to help fix.
What is GL_ARB_arrays_of_arrays and why should I care?
GL_ARB_arrays_of_arrays is one of the extensions required for a driver to advertise support for OpenGL 4.3
It helps OpenGL become a more appealing API to developers. From the spec:
"Multi-dimensional arrays are a frequently requested feature. This extension removes the restriction that arrays cannot be formed into arrays, allowing arrays of arrays to be declared."
Specification link: http://www.opengl.org/registry/specs/ARB/arrays_of_arrays.txt
Why should I support this? Will it help my games run faster/better?
The benefits to most Linux users will not be direct benefits, for example the GL_ARB_arrays_of_arrays extension will not magically help games run faster or better. The benefits to end users will be more indirect, these benefits include:
The Mesa OpenGL implementation lags behind that of propriety drivers, currently it supports a maximum of OpenGL 3.3 which means its lacks support for 4.0, 4.1, 4.2, 4.3 and 4.4. By supporting me to implement this missing feature required as part of 4.3 it will knock another missing feature off the list. The more missing features that are implemented by independent developers, the more time the full-time Mesa dev's have to work on things such as performance and bug fixing. You can see a full list of the missing OpenGL extensions here: http://cgit.freedesktop.org/mesa/mesa/tree/docs/GL3.txt
Encouraging other independent developers to work on Mesa. One of the aims of my project is to show independent developers that it is possible to dedicate more time to Mesa than they would normally be able to by funding their work via an alternative means such as crowd-funding. I'm not only trying to fund myself but encourage more development on FOSS via alternative funding.
Some of the feedback from my last campaign gave some great insights into why people decided to back my project:
“I am just happy to be able to donate to some one who can improve Linux code, since I can not.”
“Good updates, despite my not understanding much of the detail. I'm just glad I backed a technology that will benefit others in the long run, to the benefit of a platform I love.”
“Great idea! It grates on me when I hear people say that I'm not willing to pay for software! I would gladly pay people to write good stuff for me - I just don't want to pay a big mega-corp to lock me in. Keep up the good work, look forward to hearing more!”
What progress have you already made?
I currently have setup some of the basics to implement the extension. However due to the time I have to work on the extension being limited to one hour bursts, progress is slow, and the code is a bit of a mess. I currently have most on my (very work in progress/prototype/slightly embarrassing) changes sitting on github: https://github.com/tarceri/Mesa_arrays_of_arrays/tree/wip3 Note: This code does not currently compile this is due to the large amount of changes needing to be made all at once since this extension effects most of the basic types in glsl.
I have also had two preparation type changes already committed to Mesa:
On the testing side I have started work on some basic piglit tests that I have already submitted to the piglit mailing list to get some early feedback on: http://lists.freedesktop.org/archives/piglit/2013-October/007680.html
What is Piglit?
The goal of Piglit is to help improve the quality of open source OpenGL drivers by providing developers with a simple means to perform regression tests. Having these tests available while developing the extension is really helpful for making sure things are being implemented correctly. This is why I want to focus much of my effort here. In his recent Mesa update presentation Ian Romanick from Intel noted that piglit tests accounted for about 50% of development time which is about what I found while implementing the extension from my last project. You can see Ian's presentation here: http://www.x.org/videos/XDC2013/ian_romanick_mesa_update.avi
How do I know your doing what I'm paying for?
As I did with my last campaign I will be writing a daily blog post detailing the work I did that day. This time around I will do the post on my website http://www.itsqueeze.com so that people can leave comments on the posts (this is based on feedback from the last project).
Which drivers will the extension be implemented in?
The majority of this work will be done in the glsl component of Mesa and will benefit all drivers. I will be aiming to get it fully up and running on Intel hardware as that is what I do most of my development on, however adding support to Gallium (AMD, Nvidia, etc) should be straight forward once the glsl changes have been applied.
What happens after the week is up?
I will submit my Piglit tests to be reviewed and hopefully committed to the Piglit project, I will continue working on any required changes in my own time. Once my Mesa changes are in a suitable state (compiling, generating IR) I will also submit them to the Mesa mailing list as RFC (Request For Comment) patches to get feedback on whether my changes are being implemented in a suitable way, and also to get some advice on where to look to start using the IR that's being generated with the actual drivers.
I will continue to work on it in my spare time until the full extension is completed.
Why are you asking for funding?
Short answer, Time. Unlike most new Mesa contributors I'm not a University student and I'm not hired to work on the project as part of my day job. I also have a young family at home therefore my contributions to open source usually consist of hacking on my laptop while I commute on the train to and from work. While I would eventually come up with some working code continuing to work on this only in my spare time. I would be able to come up with something much faster and of better quality if I had some dedicated time to put towards this cause.
This is my second crowd funding campaign to work on the Mesa project. Previous campaign: http://www.indiegogo.com/projects/help-improve-opengl-support-for-the-linux-graphics-drivers
I completed my degree in Computer Science Software Engineering in 2006 and have spent the past 7 years working as a programmer using various languages and technologies. In the past two and a bit years I have been increasingly active in contributing to the improvement of the Linux desktop. Some of the projects I have contributed to so far are: Mesa, gedit, GLib, GTK+, GtkSourceView, GVfs - Virtual File System, Mozilla Firefox and Nautilus.
For more information on my open source contributions see this link to my ohloh page: https://www.ohloh.net/accounts/timothyja
Due to the need to work full time to support my family the size of my contributions are limited hence this campaign.
I also have a IT blog (that I really should update more often) which has various posts about things I have worked on/been interested in over the years. See: http://www.itsqueeze.com/
Help spread the word
Contributing funds is one way to help this project but you can also help it become a success by giving this campaign some exposure. Its simple to do, tell your friends, post on your favourite Linux forum, submit my campaign to your favourite Linux blog, make me a better Logo for this page, be creative it all helps. With your help we can make a difference to the Linux graphics driver stack and pave the way for future successful campaigns.