<html>
    <head>
      <base href="https://bugs.freedesktop.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Distorted output in obs-studio where other vendors "work""
   href="https://bugs.freedesktop.org/show_bug.cgi?id=79783#c11">Comment # 11</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Distorted output in obs-studio where other vendors "work""
   href="https://bugs.freedesktop.org/show_bug.cgi?id=79783">bug 79783</a>
              from <span class="vcard"><a class="email" href="mailto:gregory.hainaut@gmail.com" title="gregory.hainaut@gmail.com">gregory.hainaut@gmail.com</a>
</span></b>
        <pre>I ran some piglit tests with a new patch (see below) to only remove deadcode
variable that doesn't have a location. Unfortunately it triggers various
regression in piglit.

1/ Test <a href="mailto:spec@glsl-1.10">spec@glsl-1.10</a>@execution@variable-indexing@fs-temp-array-mat2-col-rd
Failed to link:
error: fragment shader varying color not written by vertex shader

An unused variable still exists on the program but technically the variable
isn't read. So maybe the check can be improved. The error appears for glsl <=
120 or as a warning in GLES.

Maybe we could use ir_variable_data.used bit, don't know.

2/ Test <a href="mailto:spec@glsl-1.10">spec@glsl-1.10</a>@api@getactiveattrib 110
Failing shader:
attribute vec4 not_used;
void main() { gl_Position = gl_Vertex; }
Attribute `not_used' should not be active but is.

I think we could optimize the vertex shader input as it is the first stage of
the pipeline (until someone add a new stage). However I don't know how to check
the current stage on the IR (neither if is possible actually). Or there is
maybe a special bits to detect attribute input.

diff --git a/src/glsl/opt_dead_code.cpp b/src/glsl/opt_dead_code.cpp
index f45bf5d..29cbe52 100644
--- a/src/glsl/opt_dead_code.cpp
+++ b/src/glsl/opt_dead_code.cpp
@@ -125,6 +125,21 @@ do_dead_code(exec_list *instructions, bool
uniform_locations_assigned)
             }
          }

+        if (entry->var->data.mode == ir_var_shader_in &&
+               !entry->var->data.explicit_location)
+           continue;
+
         entry->var->remove();
         progress = true;</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>