<div dir="ltr">On 16 August 2013 22:03, Ian Romanick <span dir="ltr"><<a href="mailto:idr@freedesktop.org" target="_blank">idr@freedesktop.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On 08/16/2013 01:38 PM, Ian Romanick wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
From: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com" target="_blank">ian.d.romanick@intel.com</a>><br>
<br>
The vs-struct-pad and fs-struct-pad tests both fail on Mesa.  The UBOs<br>
from those tests are added here to help narrow down the origin of the<br>
problem.<br>
<br>
This test passes on NVIDIA (304.64 on GTX 260).<br>
<br>
v2: Correct version of the patch to send to the list.<br>
</blockquote>
<br></div>
After more review of the spec (and testing on AMD drivers), I believe the first version (with offsets 0, 16, 20, and 24) is correct after all.  It all comes down to this text from rule #9 (emphasis mine):<br>
<br>
      (9) If the member is a structure, the base alignment of the structure is<br>
          <N>, where <N> is the largest base alignment value of any of its<br>
          members, and *rounded up to the base alignment of a vec4*. The<br>
          individual members of this sub-structure are then assigned offsets<br>
          by applying this set of rules recursively, where the base offset of<br>
          the first member of the sub-structure is equal to the aligned offset<br>
          of the structure. The structure may have padding at the end; the<br>
          base offset of the member following the sub-structure is rounded up<br>
          to the next multiple of the base alignment of the structure.<br>
<br>
In part of our code we're not doing the rounding on substructures, and it doesn't look like my old NVIDIA drivers are either.  Ugh.</blockquote><div><br></div><div>I agree with your analysis.  The first version (with offsets 0, 16, 20, 24) is correct.<br>
<br></div><div>I'd recommend adding a comment to the test quoting the spec test you've quoted above, so that people don't have to go digging through email archives to understand why you chose the offsets you did.<br>
<br></div><div>With the comment added, the test is:<br><br></div><div>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br></div></div></div></div>