[Mesa-dev] [RFC]UBO support update

Vincent Lejeune vljn at ovi.com
Sun Dec 25 10:17:00 PST 2011

Hi and merry chrismas everyone.

I have updated my UBO patch set to follow some recommandations from ML.
I splitted some patches (and for some of them, added a longer description).
The last three ones needs a bit more polishing though, and there might be
some leftover debug code or old comments that I missed when cleaning.

This patch set passes my 4 piglit tests (submitted earlier) on softpipe. These 
piglit tests checks standard layout conformance, correct type report, and 
several draw situations : simple variable dereference, record dereference,
direct addressing array dereference and indirect addressing array dereference
for draw_test, and structure/array copy in draw_several_ubo_test (as well as
checking that several UBO are well supported).

Some items are still left to claim complete spec conformance :
- i965 dri support. I checked that the driver builds, and it seems not to 
suffer from regression with these patches (I did a quick test with my snb
setup). Support for llvmpipe, r600g and vmwgfx gallium drivers.
I don't have any expererience in low level hardware programmation ...
- Matrix support at code generation.
- API queries on classic uniform.
- Queries on program that failed to link. The spec says that API querying 
should work on program that fails to link, and gives the example of a 
program that has too many uniforms for the linker. However the spec is
really vague on the behavior the API should have in every case (what happens
if UBO definition does not match in separate shaders for instance ?)
- Support for shared and packed layout. Strictly speaking, having just 
std140 layout is spec compliant, as these 2 additionnals layout are
implementation specific, but the spec introduces these 2 additionnals layout
for optimisation purpose, so it would be nice to use these layouts to have
some kind of uniform packing.
- It is out of spec, but many sample code uses this feature : array of UBO
and UBO instanciation. The official way of declaring a UBO is
layout(...) uniform OpenGLName { ... };
but there were 2 others ways in draft of the spec :
layout(...) uniform OpenGLName { ... } GLSLName;
layout(...) uniform OpenGLName { ... } GLSLName[n];
that allowed following shader codes to dereference UBO as if it was a struct
or an array. These features are said to be deferred to another extension
 in the spec FAQ but even opengl.org wiki mentions UBO instanciation and 
array of UBO as possible way of declaration.


More information about the mesa-dev mailing list