On 08/16/2018 06:02 PM, Caio Marcelo de Oliveira Filho wrote:
> Hello,
> 
>> +    (add a new row after the exiting "atomicMax" table row, p. 179)
>> +
>> +        float atomicMax(inout float mem, float data)
>> +
>> +        Computes a new value by taking the maximum of the value of data and
>> +    the contents of mem.  If one of these is an IEEE signaling NaN (i.e.,
> 
> The two lines above have different indentations, maybe the
> "Computes..." line should be starting with a TAB.

I'll check the indentation.  It should all be spaces, but there may be
issues.

>> +Interactions with OpenGL 4.6 and ARB_gl_spirv
>> +
>> +    If OpenGL 4.6 or ARB_gl_spirv is supported, then
>> +    SPV_INTEL_shader_atomic_float_minmax must also be supported.
> 
> Couldn't find the SPIR-V extension, but I guess is work in
> progress.  Is there a Vulkan extension too?

Both are in-progress, yeah.

>> +    * atomicMin and atomicMax implement the IEEE specification with respect 
>> to
>> +      NaN.  IEEE considers two different kinds of NaN: signaling NaN and 
>> quiet
>> +      NaN.  A quiet NaN has the most significant bit of the mantissa set, 
>> and
>> +      a signaling NaN does not.  This concept does not exist in SPIR-V,
>> +      Vulkan, or OpenGL.  Let qNaN denote a quiet NaN and sNaN denote a
>> +      signaling NaN.  atomicMin and atomicMax specifically implement
>> +
>> +      - fmin(qNaN, x) = fmin(x, qNaN) = fmax(qNaN, x) = fmax(x, qNaN) = x
>> +      - fmin(sNaN, x) = fmin(x, sNaN) = fmax(sNaN, x) = fmax(x, sNaN) = sNaN
>> +      - fmin(sNaN, qNaN) = fmin(qNaN, sNaN) = fmax(sNaN, qNaN) =
>> +        fmax(qNaN, sNaN) = sNaN
> 
> For the two items above, is it implicit that the result will be
> quietized?  This matters when using such result with other operation
> with a real value, e.g. is "fmin(fmin(x, sNaN), y)" equals to "y" or
> to "sNaN"?
> 
> The PRM for Skylake says
> 
>     "Max(x, sNaN) = Max(sNaN, x) = qNaN (quietized value corresponding
>     to the input sNaN) and signal the Invalid Operation exception."

That is interesting... the Bspec says something similar, but it has an
extra note that sNaN is not quieted on SKL+.  It /seems/ like this was
intention and won't be changed.  My tests on SKL seem to confirm that,
with respect to fmin and fmax, once you have sNaN, you will always have
sNaN.

> Thanks,
> Caio
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to