<html>
    <head>
      <base href="https://bugs.freedesktop.org/" />
    </head>
    <body><span class="vcard"><a class="email" href="mailto:sroland@vmware.com" title="Roland Scheidegger <sroland@vmware.com>"> <span class="fn">Roland Scheidegger</span></a>
</span> changed
              <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - Shader branches excluded by uniform values are not optimized out"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=83785">bug 83785</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;">Severity</td>
           <td>major
           </td>
           <td>enhancement
           </td>
         </tr>

         <tr>
           <td style="text-align:right;">Component</td>
           <td>Mesa core
           </td>
           <td>Other
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - Shader branches excluded by uniform values are not optimized out"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=83785#c1">Comment # 1</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - Shader branches excluded by uniform values are not optimized out"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=83785">bug 83785</a>
              from <span class="vcard"><a class="email" href="mailto:sroland@vmware.com" title="Roland Scheidegger <sroland@vmware.com>"> <span class="fn">Roland Scheidegger</span></a>
</span></b>
        <pre>Are you talking about specific drivers? Doesn't look like a mesa core problem
to me, since if it's a uniform glsl can't do anything, and drivers will have to
handle that appropriately (typically hw either has if/else constructs with
implicit built-in mask evaluation so there's jump addresses specified there
(intel hd graphics seems to work like that) or the jump is done explicitly
(radeon gcn seems to do that).
If you're talking llvmpipe, you would be right it always evaluates all
branches, no matter the current condition mask (which, in case the branch
condition is based only on uniforms, indeed means one part of the branch will
always be executed for nothing), and simply masks out the values for the not
taken branch part when storing the values. This is probably both due to
simplicity and historical reasons (don't forget early programmable hw did not
always have true branches neither). It is something I was thinking about, I
think there'd definitely be benefits but I never looked at it closely enough to
know how much work it would be. For starters, you'd need to put the code in the
branches into different basic blocks, and get all the things right related to
it. In some cases it could possibly be a loss due to missing some optimizations
(if both branches need to be evaluated - I don't think you'd want to do this
just in case of uniform branch condition, though this might be a start).</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>