<html>
    <head>
      <base href="https://bugs.freedesktop.org/">
    </head>
    <body><span class="vcard"><a class="email" href="mailto:danylo.piliaiev@gmail.com" title="Danylo <danylo.piliaiev@gmail.com>"> <span class="fn">Danylo</span></a>
</span> changed
          <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [HSW] Ambient occlusion glitch in Planetary Annihilation on Intel HD4600"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=80018">bug 80018</a>
          <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">CC</td>
           <td>
                
           </td>
           <td>danylo.piliaiev@gmail.com
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [HSW] Ambient occlusion glitch in Planetary Annihilation on Intel HD4600"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=80018#c4">Comment # 4</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [HSW] Ambient occlusion glitch in Planetary Annihilation on Intel HD4600"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=80018">bug 80018</a>
              from <span class="vcard"><a class="email" href="mailto:danylo.piliaiev@gmail.com" title="Danylo <danylo.piliaiev@gmail.com>"> <span class="fn">Danylo</span></a>
</span></b>
        <pre>I think I found the cause:

In sao_apply.fs random angle is calculated in the following way:
<span class="quote">> ivec2 ssC = ivec2(gl_FragCoord.xy);
> float randomPatternRotationAngle = (3 * ssC.x ^ ssC.y + ssC.x * ssC.y) * 10;</span >
This means that randomPatternRotationAngle will have huge values thus sin and
cos may give quite imprecise values. It is precise enough on Radeon and Nvidia
but not enough on Intel GPUs.

The documentation Volume 7: 3D-Media-GPGPU states:
<span class="quote">> Precision: 
> DirectX 10 and below Absolute error <= 0.0008 for the range of +/- 32767 * pi 
> Outside of the above range the function will remain periodic, 
> producing values between -1 and 1.</span >
In practice passing values greater than 32767 * pi to cos or sin gives unusable
output for most purposes (I'm not exactly sure if it is true for all Intel
GPUs).

The easy fix will be calculating randomPatternRotationAngle like this:
<span class="quote">> float randomPatternRotationAngle = mod(3 * ssC.x ^ ssC.y + ssC.x * ssC.y, 6.28318530718);</span >

After the change there is no more artifacts.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are the QA Contact for the bug.</li>
      </ul>
    </body>
</html>