[Mesa-dev] [PATCH 3/3] glsl: Generate smaller values for uniform locations

Fredrik Höglund fredrik at kde.org
Mon Jun 10 15:54:26 PDT 2013

On Monday 10 June 2013, Brian Paul wrote:
> On 06/10/2013 11:52 AM, Ian Romanick wrote:
> > From: Ian Romanick <ian.d.romanick at intel.com>
> >
> > Previously we would generate uniform locations as (slot << 16) +
> > array_index.  We do this two handle applications that assume the

to handle

> > location of a[2] will be +1 from the location of a[1].  This resulted in
> > every uniform location being at least 0x10000.  We've now encountered
> > two applications that assume uniform values will be smaller.
> >

I wonder if OpenGL doesn't in fact imply this.

Section 4.4.3 of the GLSL 4.30 spec says this about the location layout-

	"Individual elements of a uniform array are assigned consecutive locations
	 with the first element taking location /location/."


	"The first inner-most scalar, vector or matrix member or element takes
	 the specified /location/ and the compiler assigns the next inner-most
	 member or element the next incremental location value. Each subsequent
	 inner-most member or element gets incremental locations for the entire
	 structure or array. This rule applies to nested structures and arrays and
	 gives each inner-most scalar, vector, or matrix type a unique location.
	 For arrays without an explicit size, the size is calculated based on its
	 static usage. When the linker generates locations for uniforms without an
	 explicit location, it assumes for all uniforms with an explicit location all
	 their array elements and structure members are used and the linker will
	 not generate a conflicting location, even if that element of member is
	 deemed unused."

It seems unlikely to me that the intent is for the compiler to only apply
this rule to uniforms with an explicit location, even though the spec can
be read that way.


More information about the mesa-dev mailing list