On 24.10.2016 17:16, Ilia Mirkin wrote:
On Mon, Oct 24, 2016 at 11:12 AM, Nicolai Hähnle <nhaeh...@gmail.com> wrote:
On 24.10.2016 16:44, Ilia Mirkin wrote:
In any case, the GLSL way is backwards-compatible with the DX11 way.
It just specifies some unspecified situations.

No, it isn't -- that's the whole problem :)

Both GLSL and SM5 specify clearly what should happen for the offset=0,
bits=32 case, but they disagree.

Oh. Interesting. Do we have tests for that? (Do they fail on nvc0?
Pretty sure they were passing last I checked...)

I find this very surprising BTW - please double-check.

For SM5: https://msdn.microsoft.com/en-us/library/windows/desktop/hh446837(v=vs.85).aspx is pretty clear that only the 5 LSBs matter, i.e. bits=32 should be the same as bits=0.

For GLSL, the quote is:

  Extracts bits [offset, offset + bits - 1] from value,
  returning them in the least significant bits of the result.
  [...]
  If bits is zero, the result will be zero. The result will
  be undefined if offset or bits is negative, or if the sum
  of offset and bits is _greater_than_ the number of bits used
  to store the operand.

None of this would be a problem if the spec said "greater than or equal to" instead.

We have piglit tests for that, which I realize now I forgot to mention in the commit message: arb_gpu_shader5/execution/built-in-functions/{fs,vs}-bitfield{extract,insert}.

There's also a GL CTS test that checks for this.

Cheers,
Nicolai
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to